Directx9.0 3D游戏开发编程基础

  • N2_480759
    了解作者
  • 8.1MB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-08 03:04
    上传日期
第1章 初始化Direct3D 第2章 绘制流水线 第3章 Direct3D中的绘制 第4章 颜色 第5章 光照 第6章 纹理映射 第7章 融合技术 第8章 模板 第9章 字体 第10章 网格(一) 第11章 网格(二) 第12章 设计一个灵活的Camera类 第13章 地形绘制基础 第14章 粒子系统 第15章 拾取 第16章 高级着色语言(HLSL)入门 第17章 顶点着色器入门 第18章 像素着色器入门 第19章 效果框架
Directx9.0 3D游戏开发编程基础.zip
内容介绍
/******************************************************************* * Advanced 3D Game Programming using DirectX 9.0 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * copyright (c) 2003 by Peter A Walsh and Adrian Perez * See license.txt for modification and distribution information ******************************************************************/ // MTUDP.cpp: implementation of the MTUDP class. // ////////////////////////////////////////////////////////////////////// #include "MTUDP.h" #include "cNetError.h" #include "Macros.h" #include <stdio.h> ////////////////////////////////////////////////////////////////////// enum eMTUDPMsgType { MTUDPMSGTYPE_ACKS = 0, MTUDPMSGTYPE_RELIABLE = 1, MTUDPMSGTYPE_UNRELIABLE = 2, MTUDPMSGTYPE_CLOCK = 3, MTUDPMSGTYPE_NUMMESSAGES = 4, }; ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// MTUDP::MTUDP() { d_bRunning = false; d_bSending = false; d_bListening = false; d_bIsClientOn = false; d_bIsServerOn = false; d_listenSocket = 0; d_sendSocket = 0; d_bytesTransfered = 0; } MTUDP::~MTUDP() { StopListening(); StopSending(); Cleanup(); } void MTUDP::Startup( unsigned short localListenPort, unsigned short foreignListenPort ) { Cleanup(); // Start Winsock OutputDebugString( "MTUDP::Startup() - Initializing Winsock.\n" ); WSAData wsaData; int error; error = WSAStartup( MAKEWORD( 2, 2 ), &wsaData ); if( error == SOCKET_ERROR ) { char errorBuffer[ 100 ]; error = WSAGetLastError(); if( error == WSAVERNOTSUPPORTED ) { sprintf( errorBuffer, "MTUDP::Startup() - WSAStartup() error.\nRequested v2.2, found only v%d.%d.", LOBYTE( wsaData.wVersion ), HIBYTE( wsaData.wVersion ) ); WSACleanup(); } else sprintf( errorBuffer, "MTUDP::Startup() - WSAStartup() error %d", WSAGetLastError() ); throw cNetError( errorBuffer ); } d_localListenPort = localListenPort; d_foreignListenPort = foreignListenPort; d_bytesTransfered = 0; d_bRunning = true; } void MTUDP::StartListening() { if( d_bListening == true || d_bRunning == false ) return; d_bListening = true; // Start the listen socket. OutputDebugString( "MTUPD::StartListening() - Creating the listen socket.\n" ); d_listenSocket = socket( AF_INET, SOCK_DGRAM, 0 ); if( d_listenSocket == INVALID_SOCKET ) { char errorBuffer[ 100 ]; sprintf( errorBuffer, "MTUPD::StartListening() - socket() error %d", WSAGetLastError() ); throw cNetError( errorBuffer ); } SOCKADDR_IN localAddr; int result; memset( &localAddr, 0, sizeof( SOCKADDR_IN ) ); localAddr.sin_family = AF_INET; localAddr.sin_addr.s_addr = htonl( INADDR_ANY ); localAddr.sin_port = htons( d_localListenPort ); result = bind( d_listenSocket, (sockaddr *)&localAddr, sizeof( SOCKADDR_IN ) ); if( result == SOCKET_ERROR ) { closesocket( d_listenSocket ); char errorBuffer[ 100 ]; sprintf( errorBuffer, "MTUPD::StartListening() - bind() error %d", WSAGetLastError() ); throw cNetError( errorBuffer ); } unsigned long int val; val = 1; // Anything non-zero. result = ioctlsocket( d_listenSocket, FIONBIO, &val ); if( result ) { closesocket( d_listenSocket ); char errorBuffer[ 100 ]; sprintf( errorBuffer, "MTUPD::StartListening() - ioctlsocket() error %d", WSAGetLastError() ); throw cNetError( errorBuffer ); } // Start the thread. OutputDebugString( "MTUPD::StartListening() - Starting the listen thread.\n" ); cThread::Begin(); } void MTUDP::StartSending() { if( d_bSending == true || d_bRunning == false ) return; d_bSending = true; // Create send socket OutputDebugString( "MTUPD::StartSending() - Creating the send socket.\n" ); d_sendSocket = socket( AF_INET, SOCK_DGRAM, 0 ); if( d_sendSocket == INVALID_SOCKET ) { char errorBuffer[ 100 ]; sprintf( errorBuffer, "MTUPD::StartSending() - socket() error %d", WSAGetLastError() ); throw cNetError( errorBuffer ); } SOCKADDR_IN localAddr; int result; memset( &localAddr, 0, sizeof( SOCKADDR_IN ) ); localAddr.sin_family = AF_INET; localAddr.sin_addr.s_addr = htonl( INADDR_ANY ); localAddr.sin_port = htons( 0 ); result = bind( d_sendSocket, (sockaddr *)&localAddr, sizeof( SOCKADDR_IN ) ); if( result == SOCKET_ERROR ) { closesocket( d_sendSocket ); char errorBuffer[ 100 ]; sprintf( errorBuffer, "MTUPD::StartSending() - bind() error %d", WSAGetLastError() ); throw cNetError( errorBuffer ); } unsigned long int val; val = 1; // Anything non-zero. result = ioctlsocket( d_sendSocket, FIONBIO, &val ); if( result ) { closesocket( d_sendSocket ); char errorBuffer[ 100 ]; sprintf( errorBuffer, "MTUPD::StartSending() - ioctlsocket() error %d", WSAGetLastError() ); throw cNetError( errorBuffer ); } } void MTUDP::StopListening() { if( d_bListening == false ) return; d_bListening = false; cThread::End(); OutputDebugString( "MTUPD::StopListening() - Closing the listen socket.\n" ); closesocket( d_listenSocket ); } void MTUDP::StopSending() { if( d_bSending == false ) return; d_bSending = false; OutputDebugString( "MTUPD::StopSending() - Closing the send socket.\n" ); closesocket( d_sendSocket ); } void MTUDP::Cleanup() { if( d_bRunning == false ) return; d_bRunning = false; StopListening(); StopSending(); OutputDebugString( "MTUPD::Cleanup() - Cleaning up Winsock.\n" ); d_hosts.clear(); d_hostMap.clear(); WSACleanup(); } //////////////////////////////////////////////////////////////////////////////// void MTUDP::StartClient() { d_bIsClientOn = true; } void MTUDP::StopClient() { d_bIsClientOn = false; } void MTUDP::StartServer() { d_bIsServerOn = true; } void MTUDP::StopServer() { d_bIsServerOn = false; } //////////////////////////////////////////////////////////////////////////////// DWORD MTUDP::ThreadProc() { if( d_bListening == false ) return 0; // Quit already?! char inBuffer[ MAX_UDPBUFFERSIZE ]; timeval waitTimeStr; SOCKADDR_IN fromAddr; int fromLen; unsigned short result; FD_SET set; #if defined( _DEBUG ) memset( inBuffer, 0xFF, MAX_UDPBUFFERSIZE ); #endif OutputDebugString( "MTUDP::ThreadProc() - Listening thread started.\n" ); try { while( d_bListening == true ) { // Listen to see if there is data waiting to be read. FD_ZERO( &set ); FD_SET( d_listenSocket, &set ); waitTimeStr.tv_sec = 0; waitTimeStr.tv_usec = 0; // Select tells us if there is data to be read. result = select( FD_SETSIZE, &set, NULL, NULL, &waitTimeStr ); if( result == 0 ) { Sleep( 10 ); continue; } if( result == SOCKET_ERROR ) { char errorBuffer[ 100 ]; sprintf( errorBuffer, "MTUDP::ThreadProc() - select() error %d", WSAGetLastError() ); throw cNetError( errorBuffer ); } // Recvfrom gets the data and puts it in inBuffer. fromLen = sizeof( SOCKADDR ); result = recvfrom( d_listenSocket, inBuffer, MAX_UDPBUFFERSIZE, 0, (SOCKADDR *)&fromAddr, &fromLen ); if( result == 0 ) { Sleep( 10 ); continue; } if( result == SOCKET_ERROR ) { char errorBuffer[ 100 ]; sprintf( errorBuffer, "MTUDP::ThreadProc() - recvfrom() error %d", WSAGetLastError() );
评论
    相关推荐
    • 着色器中调制和解调ntsc视频信号-JavaScript开发
      调制和解调着色器中的ntsc视频信号glsl-ntsc-video调制和解调着色器中的ntsc视频信号用glslify编译ntsc是北美,加勒比海,南美部分地区和一些国家/地区使用的广播电视标准。东亚和太平洋地区。 ntsc在2009年因无线...
    • 计算着色器101训练的示例代码-Rust开发
      计算着色器101培训的示例代码计算着色器101的示例代码此存储库包含示例代码,可帮助...当今,计算着色器在现实世界中的大多数使用情况是在游戏的环境中进行的,它们在其中进行物理模拟,高级图像效果等等。 已经有游戏
    • Android3D应用与游戏开发框架JQGL.zip
      本框架针对于Android 移动设备的特点,对OpenGL 进行封装,让使用者脱离底层着色器程序的使用,并且继承Android 原生态的开发框架的特点,可与其进行类比学习,让使用者可以快速的掌握它。   标签:...
    • Unity着色器和屏幕特效开发秘笈
      《Unity着色器和屏幕特效开发秘笈》共分为11章,几乎包含了Unity着色器中常用的效果示例。主要内容包括基础的漫反射着色;两种高光类型Blinn和Phong,以及利用这些高光类型创造蒙版镜面、金属镜面等高光效果;反射的...
    • 手游双面半透明着色器_shader_transparent_doubleface_mobile
      适用于手机游戏开发的,高效的着色器shader,双面半透明,还高光反射
    • 网络游戏开发-HLSL
      网络游戏开发-HLSL,游戏学院教学PPT,例子
    • DirectX9.03D游戏开发编程基础
      DirectX9.03D游戏开发编程基础,是针对3D游戏开发,与游戏透视辅助开发的,辅助丛书,具有很高的参考性和研究性,为需要了解游戏透视辅助开发的新手提供一本可参考的引用教材
    • OpenGL ES 3.x游戏开发 吴亚峰
      OpenGL ES 3.x游戏开发 吴亚峰 上卷 OpenGL ES 3.x游戏开发 吴亚峰 下卷
    • graphics-resources:图形编程资源列表
      我的一些书签与游戏开发和实时图形编程有关。 批量下载 您可以使用批量下载这里的部分内容以供离线阅读。 例如: gh-readme-scrape mattdesl/graphics-resources resources/ -e pdf,pptx,ppt --rename 这会将所有 ...
    • GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz
      guassdb100在redhat上安装包,单机部署的包,安装步骤请看我的文中介绍,经过大量实验搭建总结出来的文档