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. php 语言特点

    PS:绝大多数用php的企业/ 项目 活不到雇佣得起月薪35k以上的php程序员那一天,也是php码农在10年经验的时候普遍不如java程序员的原因之一. PS2: 由于薪资提升太快,很多php码农跳 ...

  2. Long类型比较大小,long型和Long型区别

    今天写代码发现发现本地程序是正常的,但是发送到测试环境就不正常了,本着对数据的怀疑态度链接了测试数据库,调试程序发现,确实是数据问题,然后数据出现在什么地方呢?才发现是在判断用户所属的teamGrou ...

  3. c# 读取ACCESS 数据库

    using System; using System.Collections.Generic; using System.Data.OleDb; using System.IO; using Syst ...

  4. 深入理解Solaris内核中互斥锁(mutex)与条件变量(condvar)之协同工作原理

    在Solaris上写内核模块总是会用到互斥锁(mutex)与条件变量(condvar), 光阴荏苒日月如梭弹指一挥间,Solaris的大船说沉就要沉了,此刻心情不是太好(Orz).每次被年轻的有才华的 ...

  5. 关于spring autowrie的5种方式

    spring自动注入有5中方式,分别是: byName:根据自动注入类中的对象名字,会到配置文件中找相关id或者name的bean,如果找不到则不会匹配,如果找到多个bean,则会报错. byType ...

  6. ajax加php实现简单的投票效果

    废话少说,作为一个前端猿,首先上前端的代码. 1.上html代码: <!DOCTYPE html> <html> <head lang="en"> ...

  7. CodeForces 670E Correct Bracket Sequence Editor

    链表,模拟. 写一个双向链表模拟一下过程. #pragma comment(linker, "/STACK:1024000000,1024000000") #include< ...

  8. USACO 3.2 Contact

    ContactIOI'98 The cows have developed a new interest in scanning the universe outside their farm wit ...

  9. Ajax实现页面动态加载,添加数据

    前台代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Products ...

  10. WinForm 无边框窗体和timer控件

    一.无边框窗体 1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入,移出,按下三个事件会让按钮改变样式 如何获取图 ...