matrix ViewProjMatrix;
vector Blue = {0.0f, 0.0f, 1.0f, 0.0f}; struct VS_INPUT
{
vector position : POSITION;
}; struct VS_OUTPUT
{
vector position : POSITION;
vector diffuse : COLOR;
}; VS_OUTPUT Main(VS_INPUT input)
{
VS_OUTPUT output = (VS_OUTPUT);
output.position = mul(input.position, ViewProjMatrix);
output.diffuse = output.position;
return output;
}
#ifndef QD3DWIDGET_H
#define QD3DWIDGET_H #include <QtGui/QtGui>
#include <d3d9.h>
#include <d3dx9.h>
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
extern LPDIRECT3D9 g_pD3D;
extern LPDIRECT3DDEVICE9 g_pDevice;
extern LPDIRECT3DVERTEXBUFFER9 g_pVertexBuffer;
extern LPDIRECT3DINDEXBUFFER9 g_pIndexBuffer;
HRESULT Init3D(HWND hWnd); struct CUSTOMVERTEX
{
float x,y,z;
DWORD color;
}; #define D3DFVF_CUSTOMVERTEXT (D3DFVF_XYZ|D3DFVF_DIFFUSE) class QD3DWidget : public QWidget
{
Q_OBJECT public:
QD3DWidget(QWidget *parent = NULL);
~QD3DWidget();
QPaintEngine *paintEngine()const;
protected:
void paintEvent(QPaintEvent *ev);
virtual void initialize3D();
virtual bool initGemetry();
private:
void setupMatrices();
private:
int fRotateY;
}; #endif // QD3DWIDGET_H
#include "MyFrame.h"
#include <iostream>
LPDIRECT3D9 g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pDevice = NULL;
LPDIRECT3DVERTEXBUFFER9 g_pVertexBuffer = NULL;
LPDIRECT3DINDEXBUFFER9 g_pIndexBuffeer = NULL;
LPD3DXMESH g_teapot = NULL;
IDirect3DVertexShader9 * g_pVertexShader = NULL;
ID3DXConstantTable * g_pConstantTable = NULL;
D3DXHANDLE ViewProjMatrixHandle = ; bool PrepareShader()
{
ID3DXBuffer * shader;
ID3DXBuffer * errorBuffer; HRESULT hr = D3DXCompileShaderFromFileA("my.fx", , , "Main", "vs_1_1",
D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY, &shader, &errorBuffer, &g_pConstantTable
); if (errorBuffer)
{
std::cout << errorBuffer->GetBufferPointer() << std::endl;
errorBuffer->Release();
} if (FAILED(hr))
{
std::cout << "CompileShader FAILED" << std::endl;
exit(-);
} hr = g_pDevice->CreateVertexShader((DWORD *)shader->GetBufferPointer(), &g_pVertexShader);
if (FAILED(hr))
{
std::cout << "Create Shader FAILED" << std::endl;
}
shader->Release();
ViewProjMatrixHandle = g_pConstantTable->GetConstantByName(, "ViewProjMatrix");
}
HRESULT Init3D(HWND hWnd)
{
if(NULL ==(g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
return E_FAIL; D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp , sizeof(d3dpp));
d3dpp.Windowed = true;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16; if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dpp,&g_pDevice)))
return E_FAIL; g_pDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE); g_pDevice->SetRenderState(D3DRS_LIGHTING,FALSE);
g_pDevice->SetRenderState(D3DRS_ANTIALIASEDLINEENABLE,TRUE);
g_pDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_TRUE);
return S_OK;
} QD3DWidget::QD3DWidget(QWidget *parent)
: QWidget(parent)
, fRotateY()
{ setAttribute(Qt::WA_PaintOnScreen , true);
setGeometry(, , , );
initialize3D();
} QD3DWidget::~QD3DWidget()
{ g_pDevice->Release();
g_pD3D->Release();
} QPaintEngine * QD3DWidget::paintEngine()const
{
return NULL;
} void QD3DWidget::initialize3D()
{
Init3D(winId());
initGemetry();
D3DXCreateTeapot(g_pDevice, &g_teapot, NULL);
PrepareShader();
} void QD3DWidget::paintEvent(QPaintEvent *ev)
{ g_pDevice->Clear(,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(,,),1.0f,);
setupMatrices();
g_pDevice->BeginScene();
g_pDevice->SetVertexShader(g_pVertexShader);
g_teapot->DrawSubset();
g_pDevice->EndScene();
g_pDevice->Present(NULL,NULL,NULL,NULL); update(); } bool QD3DWidget::initGemetry()
{ return true;
} void QD3DWidget::setupMatrices()
{
static float angle = 0.0f; D3DXMATRIX worldMatrix;
D3DXMatrixRotationY(&worldMatrix, angle);
g_pDevice->SetTransform(D3DTS_WORLD, &worldMatrix);
angle += 0.1f; D3DXMATRIX viewMatrix;
D3DXVECTOR3 eye(0.0f, 0.0f, -5.0f);
D3DXVECTOR3 center(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
D3DXMatrixLookAtLH(&viewMatrix, &eye, &center, &up);
g_pDevice->SetTransform(D3DTS_VIEW, &viewMatrix); D3DXMATRIX projMatrix;
D3DXMatrixPerspectiveFovLH(&projMatrix, D3DX_PI/4.0f, (float)width()/(float)height(), 1.0f, 1000.0f);
g_pDevice->SetTransform(D3DTS_PROJECTION, &projMatrix); D3DXMATRIX viewproj = worldMatrix * viewMatrix * projMatrix;
g_pConstantTable->SetMatrix(g_pDevice, ViewProjMatrixHandle, &viewproj);
g_pConstantTable->SetDefaults(g_pDevice);
}

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. react-router的基础知识

    一.基本用法 React Router 安装命令如下. $ npm install -S react-router 使用时,路由器Router就是React的一个组件. import { Router ...

  2. html5精品教程

    链接:http://pan.baidu.com/s/1ntr7yJ3 密码:7qvz链接:http://pan.baidu.com/s/1c0haxZM 密码:paok

  3. 相机标定 matlab opencv ROS三种方法标定步骤(1)

    一 . 理解摄像机模型,网上有很多讲解的十分详细,在这里我只是记录我的整合出来的资料和我的部分理解 计算机视觉领域中常见的三个坐标系:图像坐标系,相机坐标系,世界坐标系,实际上就是要用矩阵来表 示各个 ...

  4. iframe自适应高度处理方案

    第一种:这个方案能解决大多数自适应高度问题,方法是在iframe所要加载的页面上添加代码,把它的高度告诉iframe所在页面.缺点显而易见,如果iframe要加载的页面非常多而且不固定那么代码加起来很 ...

  5. PHP22期基础班总结

    11月7号,我们结束了为期17天的PHP基础班课程,最后一天的晚自习之后,马总问了我们的一个问题,基础班1000块钱的课程,我们认为是否值得这个价格?这其实是一个很好的问题. 2016年1000块钱能 ...

  6. shell的入门

    shell :弱类型. 解释型语言 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 ...

  7. ubuntu14.04下安装ice3.5.1

    ubuntu 14.04下是可以通过下面这条指令安装ice3.5的 sudo apt-get install libzeroc-ice35-dev 1. 从这里下载ice源文件 主要包括两部分:ice ...

  8. java导出数据Excel总结

    //创建获取到JFileChooser的文件名的JTextField public JTextField getTextField(Container c){ JTextField textField ...

  9. SVN打包方法

    当有一个版本稳定下来,或者是发布一个版本的时候,我们可以通过SVN打包来进行标记. 打包方法如下: 1.前提:保证本地的工程文件是没有冲突的,均提交到SVN服务器. 2.右键选择SVN中的分支/打包. ...

  10. ip地址分类和网段区分

    IP地址分类/IP地址10开头和172开头和192开头的区别/判断是否同一网段 简单来说在公司或企业内部看到的就基本都是内网IP,ABC三类IP地址里的常见IP段. 每个IP地址都包含两部分,即网络号 ...