DX shader根据顶点设置颜色
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, ¢er, &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根据顶点设置颜色的更多相关文章
- 【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色、光照与材质
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨) ...
- Vertex And Fragment Shader(顶点和片段着色器)
Vertex And Fragment Shader(顶点和片段着色器) Shader "Unlit/ Vertex_And_Fragment_Shader " { Proper ...
- iOS根据16进制的色号来设置颜色,适合封装工具类
iOS中有时候UI给的一个色号就像 #54e1b7 这个,而我们一般设置颜色都是根据RBG来设置的,所以这里需要把这个16进制的色号转为RGB值,这里我们就使用一下的方法来调用设置颜色. + (UIC ...
- leangoo更换背景、设置颜色标签功能上线啦!
leangoo看板背景太单调?卡片标签想要添加多个?没有问题,Leangoo的本次更新就给大家带来了漂亮背景和实用的颜色标签设置,接下来就让我们一起来看看吧! 设置背景: 点击看板右上角个人头像图标按 ...
- ios中用drawRect方法绘图的时候设置颜色
设置画笔颜色可以直接 [[UIColor grayColor] set];就可以设置颜色.
- 定义设置颜色的RGB值的宏
//定义设置颜色的RGB值的宏 #define RGBA(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha ...
- django后台对某些字段设置颜色
在model.py的class函数中添加如下代码 #对签收状态设置颜色 def color_state(self): ': assign_state_name = '待签收' color_code = ...
- css颜色属性及设置颜色的地方
css颜色属性 在css中用color属性规定文本的颜色. 默认值是not specified 有继承性,在javascript中语法是object.style.color="#FF0000 ...
- java中如何给控件设置颜色
1. tv.setTextColor(Color.parseColor("#000000"));2. tv.setTextColor(getResources().getCo ...
随机推荐
- C# 匿名方法和拉姆达表达式
有时候,我们需要封装一组数据,只有数据,没有方法,并且只用于当前程序,不需要在项目间重用,这时候,如果是传统的使用类来封装的话,大概会是下面这种样子: internal class SomeData ...
- 我理解的session和cookie
tomcat管理session 理解tomcat是如何生成session的. 当用户请求到web资源有request.getSession()这段代码的时候,request首先会对请求的url判读是否 ...
- Batch File Rename Utility(文件批量改名软件) 1.1.4231
软件名称: Batch File Rename Utility(文件批量改名软件) 1.1.4231.23098 软件语言: 英文 授权方式: 免费软件 运行环境: Win7 / Vista / Wi ...
- DB2数据库实例创建与删除 学习笔记
以root身份执行 $DB2HOME/instance/db2idrop -f 实例名,注意一定要加-f,否则不会删除实例下面sqllib文件.如果不幸忘了,执行db2icrt,会报sqllib文件存 ...
- NMON监控工具
工具可将服务器的系统资源耗用情况收集起来并输出一个特定的文件,并可利用 excel 分析工具nmonanalyser进行数据的统计分析.并且,nmon运行不会占用过多的系统资源,通常情况下CPU利用率 ...
- unity3d和php后台简单交互--一
unity3d开发时,用PHP作为后台是个不错的选择.对一些数据吞吐量不是很大的游戏,比如某个游戏的排名,登录等等,一般的php程序能够胜任了,并且php语言简单,开发容易对数据库尤其是mysql的支 ...
- 如何通过subId来获取phoneId?
androidL中使用一张数据表来保存sim卡信息:telephony.db中有一张记录SIM卡信息的表,siminfo: CREATE TABLE siminfo(_id INTEGER PRIMA ...
- VMMap(查看内存工具)
来源: http://www.cnblogs.com/georgepei/archive/2012/03/07/2383445.html http://www.cnblogs.com/georgepe ...
- 使用SyncToy 同步两台机器上的文件夹
@echo off echo 准备启动同步... net use \\WIN-AJH8QENQQGK "123456" /user:Administrator Z:\SyncToy ...
- CSS样式笔记
组合样式,CSS继承 .content { padding:0 0 0 5px; line-height: 30px; height: 30px; border: 1px solid #a6bee7; ...