VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2495|回复: 15

已有数据存于x[],y[],z[]三个数组,如何用vc编程在屏幕上绘出三维图形?

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-5 11:40:01 | 显示全部楼层 |阅读模式
已有数据存于x[],y[],z[]三个数组,如何用vc编程在屏幕上绘出三维图形,不需要讲如何投影等原理,只需提供vc源码(非opengl)。感谢在先。
回复

使用道具 举报

0

主题

8

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-1-5 17:18:01 | 显示全部楼层
太夸张了吧???一般都只要基本原理,自己实现,谁要源码不要原理的阿???是不是交作业阿??看来除了我,也没有人回贴了。
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-1-6 13:00:01 | 显示全部楼层
原理一抓一大把,就要看程序如何实现。平视角、俯视角,转视角怎么处理?坐标原点需偏移在屏幕中间居下(成倒T形)显示,用VC直接编码,不涉及OPENGL。
    楼上的别说大话,拿段示例来看看。
回复

使用道具 举报

0

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-7 03:06:01 | 显示全部楼层
运用“相似三角形”原理,将空间中的点“平面化”到平面即可。(LZ已经知道得很清楚了,为什么还要问呢?)
回复

使用道具 举报

0

主题

55

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
发表于 2020-1-10 23:09:01 | 显示全部楼层
不讲投影,如何用三维显示?
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-1-21 22:27:01 | 显示全部楼层
说白了就是:3点变2点的计算程序。即:A[]=f(x[],y[],z[])及 B[]=f(x[],y[],z[])。写出相关函数的代码,(并考虑:平视角、俯视角,转视角这几个变量)。
投影的原理肯定是需要的,只是不在此描述罢了。在此只想看源代码。
课堂上说的太多,作的忒少。我想此地应该反过来了吧。
回复

使用道具 举报

0

主题

18

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-24 11:54:01 | 显示全部楼层
自己算就行了
回复

使用道具 举报

0

主题

9

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-1-24 17:18:01 | 显示全部楼层
呵呵 楼主你真搞笑,当年我老师的硕士论文就是这个东西,VC中显示三维地形,你100分来要源码,还不讲原理,呵呵....还是用OPENGL实现吧,简单实用
回复

使用道具 举报

0

主题

8

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-1-26 09:00:02 | 显示全部楼层
伪码:
//in deed you must  need normal transition to change
//but i did not know!!
while(some express){
pos_x_projected[index]=x[index]/z[index];
pos_y_projected[index]=y[inedx]/z[index];
index++;
}
//world Cartesian coordinate  and viewport to windows in Windows coordinate
//i give you some formula,some stupid don't understand
(w_pos_x-WINDOWS_CDC_LEFT)/(WINDOWS_CDC_RIGHT-WINDOWS_CDC_LEFT)=(pos_x_projected-VIEWPORT_LEFT)/(VIEWPORT_RIGHT-VIEWPORT_LEFT);
(w_pos_y-WINDOWS_CDC_TOP)/(WINDOWS_CDC_BOTTOM-WINDOWS_CDC_TOP)=(pos_x_projected-VIEWPORT_BOTTOM)/(VIEWPORT_TOP-VIEWPORT_BOTTOM);
//compute the w_pos_x and w_pos_y
//but i don't where's viewport in camera ???!!1

//get DC of windows
while(some express){
dc.LineTo(w_pos_x[index],w_pos_y[index])
//some other process to draw a whole primary
}

因为图元的初始位置我们不知道,也不知道摄影机在那,更不知道是否要裁剪,所以这个流水线很难不出错误!!只能当它(x[],y[],x[])都在已经变换好的位置了,但是在实际情况中是不太可能存在的!!!以后请不要激将法,这样在verysource是没法立足的!
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-3 12:15:01 | 显示全部楼层
我有类似代码,关键是要将3维变为屏幕2维坐标,列举几例,不用OpenGl等东西.
realP[3]为你的原始3维数据点坐标,scrP为2维的屏幕坐标,生成2维点后,你Lineto不就行了?但我这个程序未实现任意角度的转换,至于还要穿插缩放与偏移算法,这里恕不展示了.

        switch(ViewType)
        {
                case VIEWTYPE_FUS://俯视图
                        scrP->x = realP[0];
                        scrP->y = realP[1];
                        break;

                case VIEWTYPE_ZHS://正视图
                        scrP->x = realP[0];
                        scrP->y = realP[2];
                        break;

                case VIEWTYPE_YOS://右视图
                        scrP->x = realP[1];
                        scrP->y = realP[2];
                        break;

                case VIEWTYPE_ZD0://西南正等轴测图
                        scrP->x = (realP[0]-realP[1])*COS_30;
                        scrP->y = (realP[0]+realP[1])*SIN_30+realP[2];
                        break;

                case VIEWTYPE_ZD1://东南正等轴测图
                        scrP->x = (realP[0]+realP[1])*COS_30;
                        scrP->y = (realP[1]-realP[0])*SIN_30+realP[2];
                        break;

......

                default:
                        scrP->x = 0;
                        scrP->y = 0;
                        break;
        }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

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