游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3027|回复: 4

关于IDirect3DDevice9::DrawPrimitive绘制位置问题

[复制链接]

6

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
QQ
发表于 2009-11-22 17:41:00 | 显示全部楼层 |阅读模式
小弟想用D3D做2D游戏 前几天图形部分差不多了 但发现贴图总是有点模糊 除非把要画的矩形大小加1才清晰
分析了很久 贴图部分没问题 我是把贴图贴在一个矩形上
然后做了个试验 发现。。发现绘制矩形的位置有点问题!

struct CUSTOMVERTEX
{
    FLOAT x, y, z, rhw;
    DWORD color;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)  //顶点格式

CUSTOMVERTEX vertices[] =
{
    { 100.0f, 400.0f, 0.5f, 1.0f, 0xffff0000, },//左下
    { 100.0f, 100.0f, 0.5f, 1.0f, 0xff00ff00, },//左上
    { 400.0f, 400.0f, 0.5f, 1.0f, 0xff0000ff, },//右下
    { 400.0f, 100.0f, 0.5f, 1.0f, 0xff00ffff, },//右上
};

但在屏幕上实际的位置确是
100 399
100 100
400 399
399 100

我绘制了两次 第一次用TRIANGLESTRIP绘制矩形
然后在把点的颜色填充成黑色 在绘制D3DPT_POINTLIST
点的位置没变 但绘制后的坐标怎么却改变了?

后来试着用D3DPT_TRIANGLELIST绘制一个三角形 最终结果也比实际的小
这是怎么回事?

刚试了 画线也是正确的..

20

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
发表于 2009-11-23 16:03:00 | 显示全部楼层

Re:关于IDirect3DDevice9::DrawPrimitive绘制位置问题

是不是和Rasterization Rules相关?
应该是top-left filling convention原因,和上面的例子很像。
可以查看下sdk文件
友情帮顶!

6

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
QQ
 楼主| 发表于 2009-11-24 02:03:00 | 显示全部楼层

Re:关于IDirect3DDevice9::DrawPrimitive绘制位置问题

=   =。。。呃 貌似。。可能是吧。。。但一般不是给已经减1的右下坐标吗 = =。。。。
难道D3D又帮我减了1.。。

52

主题

155

帖子

160

积分

注册会员

Rank: 2

积分
160
发表于 2009-11-24 10:19:00 | 显示全部楼层

Re:关于IDirect3DDevice9::DrawPrimitive绘制位置问题

CUSTOMVERTEX vertices[] =
{
    { 100.0f-0.5f, 400.0f-0.5f, 0.5f, 1.0f, 0xffff0000, },//左下
    { 100.0f-0.5f, 100.0f-0.5f, 0.5f, 1.0f, 0xff00ff00, },//左上
    { 400.0f-0.5f, 400.0f-0.5f, 0.5f, 1.0f, 0xff0000ff, },//右下
    { 400.0f-0.5f, 100.0-0.5ff, 0.5f, 1.0f, 0xff00ffff, },//右上
};

都减去0.5就对齐了

6

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
QQ
 楼主| 发表于 2009-11-24 22:20:00 | 显示全部楼层

Re:关于IDirect3DDevice9::DrawPrimitive绘制位置问题

呃 = =
全部-0.5貌似只是向左上角偏移了点 但矩形大小还是那样的

    { 100.0f, 400.0f + 1, 0.5f, 1.0f, 0xffff0000, },//左下
    { 100.0f, 100.0f, 0.5f, 1.0f, 0xff00ff00, },//左上
    { 400.0f + 1, 400.0f + 1, 0.5f, 1.0f, 0xff0000ff, },//右下
    { 400.0f + 1, 100.0f, 0.5f, 1.0f, 0xff00ffff, },//右上

偶试过了 只有这样才能正确 感觉就像少了最右边和最下面的边框
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-17 00:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表