能力值:
( LV9,RANK:280 )
|
-
-
2 楼
那个太底层了。要搞这些功能直接调gEngfuncs里的triapi和WorldToScreen,都是导出的 基础教程移步https://tieba.baidu.com/p/5177421432
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
hzqst
那个太底层了。要搞这些功能直接调gEngfuncs里的triapi和WorldToScreen,都是导出的
基础教程移步https://tieba.baidu.com/p/5177421432
CS是表哥老本行哇
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
没有视频资料什么的,但可以现教
|
能力值:
( LV2,RANK:15 )
|
-
-
5 楼
hzqst
那个太底层了。要搞这些功能直接调gEngfuncs里的triapi和WorldToScreen,都是导出的
基础教程移步https://tieba.baidu.com/p/5177421432
主要是学习代码,如果都用插件实现和只用成品没区别呢。
|
能力值:
( LV2,RANK:15 )
|
-
-
6 楼
|
能力值:
( LV9,RANK:280 )
|
-
-
7 楼
qqwawzymu
主要是学习代码,如果都用插件实现和只用成品没区别呢。
这个游戏的D3D是用DX7模拟OpenGL的,很多东西完全过时了,非常不适合用来做D3D方面的学习,你研究这个的渲染层就好比学c语言用vc6一样。你要学也最起码从DX9学起吧,更何况现在的游戏普遍都是DX11了。
|
能力值:
( LV2,RANK:15 )
|
-
-
8 楼
hzqst
这个游戏的D3D是用DX7模拟OpenGL的,很多东西完全过时了,非常不适合用来做D3D方面的学习,你研究这个的渲染层就好比学c语言用vc6一样。你要学也最起码从DX9学起吧,更何况现在的游戏普遍都是 ...
主要想学习理解 WorldToScreen 这个过程,
我需要一个实质可运行代码作为学习参考。 希望更好的理解
WorldToScreen 的坐标转换过程。再者学习到视觉远近的算法。 感谢您的一直关注。但你给的连接代码中,没看到有
WorldToScreen 的使用过程。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
我最近做过。但是没有使用WorldToScreen。因为不会用。我用的是比较麻烦的方式,先通过ce找出人物坐标,FOV,鼠标xy基址,然后还要获取游戏分辨率,通过算法将3维坐标转换成屏幕坐标。但是这种方法画出的方框有一个缺点就是比较抖,因为是通过人物鼠标的xy坐标是经常变化的,经常打一枪就变化一下。比较正确的做法应该是hookd3d的模型id获取相应数据再绘制图像。
|
能力值:
( LV9,RANK:280 )
|
-
-
10 楼
qqwawzymu
hzqst
这个游戏的D3D是用DX7模拟OpenGL的,很多东西完全过时了,非常不适合用来做D3D方面的学习,你研究这个的渲染层就好比学c语言用vc6一样。 ...
float gWorldToScreen[16];
float gScreenToWorld[16];
void R_SetupGL (void)
{
//some code...
if (gl_flipmatrix.value)
{
for (i = 0; i < 16; i += 4)
{
for (j = 0; j < 4; j++)
{
gWorldToScreen[i + j] = 0;
for (k = 0; k < 4; k++)
gWorldToScreen[i + j] += gProjectionMatrix[i + k] * r_world_matrix[k * 4 + j];
}
}
}
else
{
for (i = 0; i < 16; i += 4)
{
for (j = 0; j < 4; j++)
{
gWorldToScreen[i + j] = 0;
for (k = 0; k < 4; k++)
gWorldToScreen[i + j] += r_world_matrix[i + k] * gProjectionMatrix[k * 4 + j];
}
}
}
InvertMatrix(gWorldToScreen, gScreenToWorld);
}
int ScreenTransform( vec3_t point, vec3_t screen )
{
float w;
screen[0] = gWorldToScreen[0] * point[0] + gWorldToScreen[4] * point[1] + gWorldToScreen[8] * point[2] + gWorldToScreen[12];
screen[1] = gWorldToScreen[1] * point[0] + gWorldToScreen[5] * point[1] + gWorldToScreen[9] * point[2] + gWorldToScreen[13];
w = gWorldToScreen[3] * point[0] + gWorldToScreen[7] * point[1] + gWorldToScreen[11] * point[2] + gWorldToScreen[15];
if ( w != 0 )
{
w = 1.0f / w;
screen[0] *= w;
screen[1] *= w;
}
return w <= 0;
} 以上是官方的代码,不方便给出完整工程 不过你可以参考类似的开源项目:https://github.com/FWGS/xash3d/blob/master/engine/client/gl_rmain.c 第207行
qboolean GAME_EXPORT R_WorldToScreen( constvec3_t point, vec3_t screen )
|
能力值:
( LV2,RANK:15 )
|
-
-
11 楼
主要还是想需要一些实质性可编译直接看出东西的代码。毕竟 WorldToScreen 还是需要传入坐标。 谢谢
|
能力值:
( LV2,RANK:15 )
|
-
-
12 楼
再求。。。
|
能力值:
( LV2,RANK:15 )
|
-
-
13 楼
结贴已经在海外论坛找到了。
|
能力值:
( LV4,RANK:50 )
|
-
-
14 楼
|
|
|