1. matrix ViewProjMatrix;
  2. vector Blue = {0.0f, 0.0f, 1.0f, 0.0f};
  3.  
  4. struct VS_INPUT
  5. {
  6. vector position : POSITION;
  7. };
  8.  
  9. struct VS_OUTPUT
  10. {
  11. vector position : POSITION;
  12. vector diffuse : COLOR;
  13. };
  14.  
  15. VS_OUTPUT Main(VS_INPUT input)
  16. {
  17. VS_OUTPUT output = (VS_OUTPUT);
  18. output.position = mul(input.position, ViewProjMatrix);
  19. output.diffuse = output.position;
  20. return output;
  21. }
  1. #ifndef QD3DWIDGET_H
  2. #define QD3DWIDGET_H
  3.  
  4. #include <QtGui/QtGui>
  5. #include <d3d9.h>
  6. #include <d3dx9.h>
  7. #pragma comment(lib, "d3d9.lib")
  8. #pragma comment(lib, "d3dx9.lib")
  9. extern LPDIRECT3D9 g_pD3D;
  10. extern LPDIRECT3DDEVICE9 g_pDevice;
  11. extern LPDIRECT3DVERTEXBUFFER9 g_pVertexBuffer;
  12. extern LPDIRECT3DINDEXBUFFER9 g_pIndexBuffer;
  13. HRESULT Init3D(HWND hWnd);
  14.  
  15. struct CUSTOMVERTEX
  16. {
  17. float x,y,z;
  18. DWORD color;
  19. };
  20.  
  21. #define D3DFVF_CUSTOMVERTEXT (D3DFVF_XYZ|D3DFVF_DIFFUSE)
  22.  
  23. class QD3DWidget : public QWidget
  24. {
  25. Q_OBJECT
  26.  
  27. public:
  28. QD3DWidget(QWidget *parent = NULL);
  29. ~QD3DWidget();
  30. QPaintEngine *paintEngine()const;
  31. protected:
  32. void paintEvent(QPaintEvent *ev);
  33. virtual void initialize3D();
  34. virtual bool initGemetry();
  35. private:
  36. void setupMatrices();
  37. private:
  38. int fRotateY;
  39. };
  40.  
  41. #endif // QD3DWIDGET_H
  1. #include "MyFrame.h"
  2. #include <iostream>
  3. LPDIRECT3D9 g_pD3D = NULL;
  4. LPDIRECT3DDEVICE9 g_pDevice = NULL;
  5. LPDIRECT3DVERTEXBUFFER9 g_pVertexBuffer = NULL;
  6. LPDIRECT3DINDEXBUFFER9 g_pIndexBuffeer = NULL;
  7. LPD3DXMESH g_teapot = NULL;
  8. IDirect3DVertexShader9 * g_pVertexShader = NULL;
  9. ID3DXConstantTable * g_pConstantTable = NULL;
  10. D3DXHANDLE ViewProjMatrixHandle = ;
  11.  
  12. bool PrepareShader()
  13. {
  14. ID3DXBuffer * shader;
  15. ID3DXBuffer * errorBuffer;
  16.  
  17. HRESULT hr = D3DXCompileShaderFromFileA("my.fx", , , "Main", "vs_1_1",
  18. D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY, &shader, &errorBuffer, &g_pConstantTable
  19. );
  20.  
  21. if (errorBuffer)
  22. {
  23. std::cout << errorBuffer->GetBufferPointer() << std::endl;
  24. errorBuffer->Release();
  25. }
  26.  
  27. if (FAILED(hr))
  28. {
  29. std::cout << "CompileShader FAILED" << std::endl;
  30. exit(-);
  31. }
  32.  
  33. hr = g_pDevice->CreateVertexShader((DWORD *)shader->GetBufferPointer(), &g_pVertexShader);
  34. if (FAILED(hr))
  35. {
  36. std::cout << "Create Shader FAILED" << std::endl;
  37. }
  38. shader->Release();
  39. ViewProjMatrixHandle = g_pConstantTable->GetConstantByName(, "ViewProjMatrix");
  40. }
  41. HRESULT Init3D(HWND hWnd)
  42. {
  43. if(NULL ==(g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
  44. return E_FAIL;
  45.  
  46. D3DPRESENT_PARAMETERS d3dpp;
  47. ZeroMemory(&d3dpp , sizeof(d3dpp));
  48. d3dpp.Windowed = true;
  49. d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
  50. d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
  51. d3dpp.EnableAutoDepthStencil = TRUE;
  52. d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
  53.  
  54. if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dpp,&g_pDevice)))
  55. return E_FAIL;
  56.  
  57. g_pDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
  58.  
  59. g_pDevice->SetRenderState(D3DRS_LIGHTING,FALSE);
  60. g_pDevice->SetRenderState(D3DRS_ANTIALIASEDLINEENABLE,TRUE);
  61. g_pDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_TRUE);
  62. return S_OK;
  63. }
  64.  
  65. QD3DWidget::QD3DWidget(QWidget *parent)
  66. : QWidget(parent)
  67. , fRotateY()
  68. {
  69.  
  70. setAttribute(Qt::WA_PaintOnScreen , true);
  71. setGeometry(, , , );
  72. initialize3D();
  73. }
  74.  
  75. QD3DWidget::~QD3DWidget()
  76. {
  77.  
  78. g_pDevice->Release();
  79. g_pD3D->Release();
  80. }
  81.  
  82. QPaintEngine * QD3DWidget::paintEngine()const
  83. {
  84. return NULL;
  85. }
  86.  
  87. void QD3DWidget::initialize3D()
  88. {
  89. Init3D(winId());
  90. initGemetry();
  91. D3DXCreateTeapot(g_pDevice, &g_teapot, NULL);
  92. PrepareShader();
  93. }
  94.  
  95. void QD3DWidget::paintEvent(QPaintEvent *ev)
  96. {
  97.  
  98. g_pDevice->Clear(,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(,,),1.0f,);
  99. setupMatrices();
  100. g_pDevice->BeginScene();
  101. g_pDevice->SetVertexShader(g_pVertexShader);
  102. g_teapot->DrawSubset();
  103. g_pDevice->EndScene();
  104. g_pDevice->Present(NULL,NULL,NULL,NULL);
  105.  
  106. update();
  107.  
  108. }
  109.  
  110. bool QD3DWidget::initGemetry()
  111. {
  112.  
  113. return true;
  114. }
  115.  
  116. void QD3DWidget::setupMatrices()
  117. {
  118. static float angle = 0.0f;
  119.  
  120. D3DXMATRIX worldMatrix;
  121. D3DXMatrixRotationY(&worldMatrix, angle);
  122. g_pDevice->SetTransform(D3DTS_WORLD, &worldMatrix);
  123. angle += 0.1f;
  124.  
  125. D3DXMATRIX viewMatrix;
  126. D3DXVECTOR3 eye(0.0f, 0.0f, -5.0f);
  127. D3DXVECTOR3 center(0.0f, 0.0f, 0.0f);
  128. D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
  129. D3DXMatrixLookAtLH(&viewMatrix, &eye, &center, &up);
  130. g_pDevice->SetTransform(D3DTS_VIEW, &viewMatrix);
  131.  
  132. D3DXMATRIX projMatrix;
  133. D3DXMatrixPerspectiveFovLH(&projMatrix, D3DX_PI/4.0f, (float)width()/(float)height(), 1.0f, 1000.0f);
  134. g_pDevice->SetTransform(D3DTS_PROJECTION, &projMatrix);
  135.  
  136. D3DXMATRIX viewproj = worldMatrix * viewMatrix * projMatrix;
  137. g_pConstantTable->SetMatrix(g_pDevice, ViewProjMatrixHandle, &viewproj);
  138. g_pConstantTable->SetDefaults(g_pDevice);
  139. }

DX shader根据顶点设置颜色的更多相关文章

  1. 【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&amp;颜色、光照与材质

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨)  ...

  2. Vertex And Fragment Shader(顶点和片段着色器)

    Vertex And Fragment Shader(顶点和片段着色器) Shader "Unlit/ Vertex­_And_Fragment_Shader " { Proper ...

  3. iOS根据16进制的色号来设置颜色,适合封装工具类

    iOS中有时候UI给的一个色号就像 #54e1b7 这个,而我们一般设置颜色都是根据RBG来设置的,所以这里需要把这个16进制的色号转为RGB值,这里我们就使用一下的方法来调用设置颜色. + (UIC ...

  4. leangoo更换背景、设置颜色标签功能上线啦!

    leangoo看板背景太单调?卡片标签想要添加多个?没有问题,Leangoo的本次更新就给大家带来了漂亮背景和实用的颜色标签设置,接下来就让我们一起来看看吧! 设置背景: 点击看板右上角个人头像图标按 ...

  5. ios中用drawRect方法绘图的时候设置颜色

    设置画笔颜色可以直接 [[UIColor grayColor] set];就可以设置颜色.

  6. 定义设置颜色的RGB值的宏

    //定义设置颜色的RGB值的宏 #define RGBA(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha ...

  7. django后台对某些字段设置颜色

    在model.py的class函数中添加如下代码 #对签收状态设置颜色 def color_state(self): ': assign_state_name = '待签收' color_code = ...

  8. css颜色属性及设置颜色的地方

    css颜色属性 在css中用color属性规定文本的颜色. 默认值是not specified 有继承性,在javascript中语法是object.style.color="#FF0000 ...

  9. java中如何给控件设置颜色

     1. tv.setTextColor(Color.parseColor("#000000"));2. tv.setTextColor(getResources().getCo ...

随机推荐

  1. arm指令集

    http://blog.chinaunix.net/uid-20769502-id-112445.html

  2. Vultr日本vps搭建ss/ssr/openvpn免流教程

    每个月的手机流量不够用,运营商流量套餐价格偏高,怎么才能省钱?你在淘宝上,搜索手机免流,可找到很多奸商销售免流套餐,一块钱可买1GB流量,免流原理是什么?自己能搞吗? 手机免流原理 手机运营商中国电信 ...

  3. Python基础之字符串

    字符串内置处理函数 1.capitalize() 描述: 将字符串的第一个字母变成大写,其他字母变小写. 示例: a= "hello world" print (a.capital ...

  4. java基础3

    包装类:

  5. edittext设置为密文显示

    et_msg.setInputType(InputType.TYPE_CLASS_TEXT |InputType.TYPE_TEXT_VARIATION_PASSWORD);

  6. Hadoop优先级调度

    当同时在集群中运行多个作业时,默认情况下,Hadoop将提交的作业放入一个FIFO,一个作业结束后,Hadoop就启动下一个作业. 当一个运行时间长但是优先级较低的作业先于运行时间短而优先级较高的作业 ...

  7. centos7.0 vsftp配置

    7.0版本 1.安装 yum -y install vsftpd 2.配置 vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO //设定不允许匿名访问 loc ...

  8. informix 存储过程结构

    1.简介         存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行 ...

  9. Log4J1升级Log4J2

    近期,碰到需要将项目中的Log4J1升级到Log4J2,现进行下总结.交代下技术背景:web项目,基于Java + Maven 1. 依赖 <dependency> <groupId ...

  10. 描述符和property内建函数

    首先我们搞清楚__getattr__ ,__get__ 和 __getattribute__ 作用的不同点. __getattr__在授权中会用到. __getattribute__  当要访问属性时 ...