用DX9画三角形,三个顶点要求

用DX9画三角形,三个顶点的顺序有要求吗
下面是全部代码,在 InitVB 函数中被注释掉的数组是我写的,没注释掉的是书上的代码,经过试验我的坐标不能显示出图形,而书上的坐标可以,这是为什么?

#include<Windows.h>
#include<tchar.h>
#include<d3d9.h>
#define null NULL
#define RETURN return

LPDIRECT3D9				g_pD3D			=	NULL;
LPDIRECT3DDEVICE9		g_pd3dDevice	=	NULL;
LPDIRECT3DVERTEXBUFFER9	g_pVB			=	NULL;

struct CUSTOMVERTEX
{
	float x,y,z,rhw;
	DWORD color;
};
#define FVF ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE )

HRESULT InitD3D(HWND hWnd)
{
	g_pD3D	=	Direct3DCreate9(D3D_SDK_VERSION);
	D3DPRESENT_PARAMETERS	d3dpp;
	ZeroMemory(&d3dpp, sizeof(d3dpp));
	d3dpp.Windowed	=	TRUE;
	d3dpp.BackBufferFormat	=	D3DFMT_UNKNOWN;
	d3dpp.SwapEffect		=	D3DSWAPEFFECT_DISCARD;
	g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING,
		&d3dpp,&g_pd3dDevice);
	return S_OK;
}

HRESULT InitVB()
{
/*	CUSTOMVERTEX v[]=
	{
		100,	0,	0.5,	1,100,
		0,		100,0.5,	1,150,
		200,	100,0.5,	1,200
	};
*/
	CUSTOMVERTEX v[]=
	{
		100,	000,	0,1,0xffff0000,
		300,	50,		0,1,0xff00ff00,
		500,	400,	0,1,0xff0000ff
	};

g_pd3dDevice->CreateVertexBuffer(3*sizeof(v),0,FVF,D3DPOOL_DEFAULT,&g_pVB,0);

void* vb;
	g_pVB->Lock(0,0,(void**)&vb,0);
	memcpy(vb,v,sizeof(v));
	g_pVB->Unlock();
	return S_OK;
}
void Render()
{
	g_pd3dDevice->Clear(0,0,D3DCLEAR_TARGET,D3DCOLOR_XRGB(255,255,0),1,0);

g_pd3dDevice->BeginScene();
	g_pd3dDevice->SetStreamSource(0, g_pVB, 0, sizeof(CUSTOMVERTEX));
	g_pd3dDevice->SetFVF(FVF);
	g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,10);
	g_pd3dDevice->EndScene();

g_pd3dDevice->Present(0,0,0,0);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	message==WM_CLOSE ? PostQuitMessage(0) : 0;	
	return DefWindowProc(hWnd, message, wParam, lParam);
}
int WINAPI _tWinMain(HINSTANCE hInstance,HINSTANCE,PTSTR,int)
{
	wchar_t cn[] = L"ClassName";
	WNDCLASS wc;
	wc.style		=	CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc	=	WndProc;
	wc.cbClsExtra	=	0;
	wc.cbWndExtra	=	0;
	wc.hInstance	=	hInstance;
	wc.hIcon		=	LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor		=	LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground	=	(HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.lpszMenuName	=	NULL;
	wc.lpszClassName	=	cn;
	RegisterClass(&wc);

HWND hWnd = CreateWindow(cn,0,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
		NULL,NULL,hInstance,NULL);
	ShowWindow(hWnd, SW_SHOW);

InitD3D(hWnd);
	InitVB();
	MSG msg;
	ZeroMemory(&msg, sizeof(msg));
	while(msg.message!=WM_QUIT)
	{
		if( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) )
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		else
		{
			Render();
		}
	}
	return 0;
}

------解决方案--------------------
有要求的,要么顺时针要么逆时针,要看你的背面消隐模式了

参考:http://blog.csdn.net/yaoxinchao/article/details/7982099
------解决方案--------------------
是逆序的问题,绕序不能从窗口看,窗口以向右向下为正方向,绕序要从观察坐标系中看,坐标系以向右向上位正方向

jpg改rar 

时间: 2024-10-07 11:19:43

用DX9画三角形,三个顶点要求的相关文章

场景上一个任意三角形,用程序画出任意一个顶点所在的高,三角形由程序在某一个范围内随机生成

解析: 1.题目解析:已知三角形三个顶点的坐标例如A(x1,y1),B(x2,y2),C(x3,y3),画出任意一个顶点的高线,所有必须求出高另一个点(这里我们叫H点)的坐标,然后两个点连成线. 2.逻辑解析:要计算出高线的垂直点的坐标必须用一个方程组. 3.原理解析:根据数学里面的知识,已知两个顶点(例如B.C)的坐标,即可计算出这两个点连成线的直线方程 y = kx + b:其中 k 指的是直线方程中的斜率,b是一个未知常数,因为知道B.C两点的坐标,所以可以计算出直线BC的直线方程, 那么

OpenGL超级宝典笔记——画三角形(转)

http://my.oschina.net/sweetdark/blog/161002 学习了画线的知识,我们可以使用GL_LINE_LOOP来画闭合的多边形.但是使用这种方式画出来的只有线框,多边形没有填充颜色.OpenGL支持绘制实心的多边形,并使用当前的颜色进行填充. 三角形 简单的三角形,需要指定三个顶点. 1: glBegin(GL_TRIANGLES); 2: glVertex2f(0.0f, 0.0f); // V0 3: glVertex2f(25.0f, 25.0f); //

css伪元素before/after和画三角形的搭配应用

想要实现的效果如下: 第一步:如何用css画出三角形? 1 /* css画三角形 */ 2 .sanjiao{ 3 width:0; 4 border-top:40px solid red; 5 border-bottom:40px solid green; 6 border-left:40px solid blue; 7 border-right:40px solid yellow; 8 } 9 10 <div class="sanjiao"> 11 </div&g

WebGl 利用drawArrays、drawElements画三角形

效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>WebGl 利用drawArrays.drawElements画三角形</title> </head> <body> <canvas id="myCanvas" width="500

css3画三角形的原理

以前用过css3画过下拉菜单里文字后面的“下拉三角符号”,类似于下面这张图片文字后面三角符号的效果 下面是一个很简单的向上的三角形代码 #triangle-up { width: 0; height: 0; border-left: 50px solid transparent; border-right: 50px solid transparent; border-bottom: 100px solid blue; } 再给相应的div加上对应的class,一个如下的三角形就用css画好了

用CSS border相关属性画三角形

效果 HTML: <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>CSS Triangle Demo</title> <link rel="stylesheet" href="triangle.css"> </head> <body&g

教你几何画板画三角形内切圆的方法

几何画板的几何绘图功能让其它几何绘图工具望尘莫及,它可以完全取代数学中的三角尺和圆规.下面我们就来看一看怎样用几何画板画三角形的内切圆. 具体操作如下: 选择“线段直尺工具”,构造出一个三角形ABC. 构造角平分线.依次选择点A.B.C,选择“构造”—“角平分线”命令,做出角ABC的角平分线.相同的方法作出角BAC的角平分线,注意选取点的顺序.点击两个角平分线的交点,命名为D. 构造垂线.选择点D.线段AB,选择“构造”—“垂线”命令.这条垂线与线段AB相交于点E. 绘制三角形内切圆.选中点D和

使用CSS画三角形

很多时候我们会遇到需要应用三角形元素的场景,比如一个下拉菜单的交互提示: 或者一个页旁的装饰性标签: 实际上,给页面添加三角形的解决方案有很多,用CSS.SVG.Canvas,甚至用PS画一个贴上去都可以,但是我们在考虑解决方案时一定要选择最优的那个.可以肯定的是,当对三角形的功能需求比较简单和单一的时候,图片是首先被排除的方案.图片的难以维护性为页面的调试和修改都带来了一定的困难,所以当一个问题可以用代码来解决的时候我们一定要首先考虑它.再来考虑Canvas,尽管Canvas相对容易修改,但它

已知三角形三边长求面积

不知道有没有问题…… #include<stdio.h> #include<math.h> #include<conio.h> float areatri(float a,float b,float c); float main() { float a,b,c; float s; char d; loop: printf("输入三角形三边长,以空格隔开\n"); scanf("%f %f %f",&a,&b,&am