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. [Q]自定义快捷键

    打开CAD批量打图精灵主界面可以使用以下三个命令其一:“QuickPlot”.“QPlot”.“QP”.“PP”,其中“PP”可以更改, 方法如下:进入AutoCAD传统界面,点“工具”-“自定义”- ...

  2. js时间戳转换时间格式

    function getLocalTime(time){ if(time > 0){ var dateStr = new Date(time * 1000); var str = "& ...

  3. 【故障】当Eclipse打不开的时候

    某天,当你打开Eclipse的时候,弹出这种路径错误的界面.那么,该怎么办呢??? 参考: https://zhidao.baidu.com/question/1497777962705951219. ...

  4. [转]Python跳过第一行读取文件内容

    from itertools import islice file_name='XXXX' input_file = open(file_name) for line in islice(input_ ...

  5. 通过Windows常见性能计数器分析服务器性能瓶颈

    转载 http://www.cnblogs./junzhongxu/archive/2011/02/15/1954889.html 监测对象 Ø System(系统) l %Total Process ...

  6. linux显示行数命令

    linux 如何显示一个文件的某几行(中间几行) [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1 ...

  7. FormsCookieName保存登录用户名的使用

    一,写一个类来实现 using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...

  8. java中的URL InetAddress类

    /* * InetAddress类: * 用于标识网络上的硬件资源,表示互联网协议(ip)地址,是java对ip地址的封装. * 其实例对象包含以数字形式保存的IP地址,主机名. * InetAddr ...

  9. [河南省ACM省赛-第三届] 房间安排 (nyoj 168)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=168 分析:找到一天中需要最多的房间即可 #include<iostream> ...

  10. CentOs + Nginx + php-fpm + MySql 依赖库安装

    依赖库和开发工具 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype free ...