热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实现画茶壶,圆环,盒子,球体(2)

主要代码如下:声明定义材质D3DMATERIAL9g_material;定义光源D3DLIGHT9g_light;boolInitializeObjects(){Set

主要代码如下:

声明

//定义材质
D3DMATERIAL9 g_material;
//定义光源
D3DLIGHT9 g_light;

bool InitializeObjects()
{
 // Set the projection matrix.
 D3DXMatrixPerspectiveFovLH(&g_projection, 45.0f,
  WINDOW_WIDTH/WINDOW_HEIGHT, 0.1f, 1000.0f);

 g_D3DDevice->SetTransform(D3DTS_PROJECTION, &g_projection);

 // Set default rendering states.  启动光照
 //g_D3DDevice->SetRenderState(D3DRS_LIGHTING, true);
 g_D3DDevice->SetRenderState(D3DRS_AMBIENT,
  D3DCOLOR_COLORVALUE(0.3f,0.3f,0.3f,1.0f));

 //Setup the light source设置光源属性
 g_light.Type = D3DLIGHT_DIRECTIONAL; //类型为方向光
 g_light.Direction= D3DXVECTOR3(0.0f,0.0f,1.0f);//光在世界坐标系中传播方向的向量

 g_light.Diffuse.r = g_light.Diffuse.g = 1;// 该光源所发出的漫射光的颜色(rgba)
 g_light.Diffuse.b = g_light.Diffuse.a = 1;
 g_light.Specular.r = g_light.Specular.g = 1;// 该光源所发出的镜面光的颜色(rgba)
 g_light.Specular.b = g_light.Specular.a = 1;

 g_D3DDevice->SetLight(0,&g_light);// 设置该光源
 g_D3DDevice->LightEnable(0,true);// 启用该光源

 // Setup the material properties for the teapot.
 ZeroMemory(&g_material,sizeof(D3DMATERIAL9));// 将g_material对象的内存块清零
 g_material.Diffuse.r = g_material.Ambient.r = 0.6f;
 g_material.Diffuse.g = g_material.Ambient.g = 0.6f;
 g_material.Diffuse.b = g_material.Ambient.b = 0.7f;
 g_material.Specular.r = 0.4f;
 g_material.Specular.g = 0.4f;
 g_material.Specular.b = 0.4f;
 g_material.Power = 8.0f;

 //Create the objects  创建茶壶
    if(FAILED(D3DXCreateTeapot(g_D3DDevice,&g_teapot,NULL)))
  return false;
    //创建盒子
 if(FAILED(D3DXCreateBox(g_D3DDevice,2,2,2,&g_cube,NULL)))
  return false;
 //创建球体
    if(FAILED(D3DXCreateSphere(g_D3DDevice,1.5,25,25,
  &g_sphere,NULL)))
  return false;
 //创建圆环
    if(FAILED(D3DXCreateTorus(g_D3DDevice,0.5f,1.2f,25,25,
  &g_torus,NULL)))
  return false;

 // Define camera information.
 D3DXVECTOR3 cameraPos(0.0f, 0.0f, -8.0f);//摄像机的位置
 D3DXVECTOR3 lookAtPos(0.0f, 0.0f, 0.0f); //观察点
 D3DXVECTOR3 upDir(0.0f, 1.0f, 0.0f);     //以上方向为准

 // Build view matrix. 创建视图矩阵
 D3DXMatrixLookAtLH(&g_ViewMatrix, &cameraPos,
  &lookAtPos, &upDir);

 return true;
}

void RenderScene()
{
 // Clear the back buffer.清空后台缓存为指定色
 g_D3DDevice->Clear(0, NULL, D3DCLEAR_TARGET,
  D3DCOLOR_XRGB(0,0,0), 1.0f, 0);

 // Begin the scene.  Start rendering. 启动绘制
 g_D3DDevice->BeginScene();

 // Apply the view (camera).从世界空间到视图空间的视图转换
 g_D3DDevice->SetTransform(D3DTS_VIEW, &g_ViewMatrix);

 //Draw teapot
 D3DXMatrixTranslation(&g_WorldMatrix,2.0f,-2.0,0.0f);//平移矩阵
 g_D3DDevice->SetTransform(D3DTS_WORLD,&g_WorldMatrix);//从模型空间到世界空间的世界转换
 g_D3DDevice->SetMaterial(&g_material);  // 设置材质
 g_teapot->DrawSubset(0); //绘制茶壶

 // Draw Cube.
 D3DXMatrixTranslation(&g_WorldMatrix, -2.0f, -2.0, 0.0f); // 平移矩阵
 g_D3DDevice->SetTransform(D3DTS_WORLD, &g_WorldMatrix);   // 从模型空间到世界空间的世界转换
 g_D3DDevice->SetMaterial(&g_material);  // 设置材质
 g_cube->DrawSubset(0);    // 绘制盒子

 // Draw Sphere.
 D3DXMatrixTranslation(&g_WorldMatrix, 2.0f, 2.0, 0.0f);   // 平移矩阵
 g_D3DDevice->SetTransform(D3DTS_WORLD, &g_WorldMatrix);   // 从模型空间到世界空间的世界转换
 g_D3DDevice->SetMaterial(&g_material);  // 设置材质
 g_sphere->DrawSubset(0);  // 绘制球体

 // Draw Torus.
 D3DXMatrixTranslation(&g_WorldMatrix, -2.0f, 2.0, 0.0f);  // 平移矩阵
 g_D3DDevice->SetTransform(D3DTS_WORLD, &g_WorldMatrix);   // 从模型空间到世界空间的世界转换
 g_D3DDevice->SetMaterial(&g_material);  // 设置材质
 g_torus->DrawSubset(0);   // 绘制圆环

 // End the scene.  Stop rendering.
 g_D3DDevice->EndScene();

 // Display the scene.
 g_D3DDevice->Present(NULL, NULL, NULL, NULL);
}


推荐阅读
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
author-avatar
米斯特RAO
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有