- 主题:外行问一个关于openGL和计算机图形学的一个的问题
谢谢,您说的这句:“总结下,你看到的视频(帧),是逐像素点拉伸、变换渲染的,没有三角面片化。你关心的三角面片与连续光滑的视频帧,没有关系。”
我这样理解是否可以:视频帧不是以贴图的方式映射到Quad或者多边形上去的,所以该视频所覆盖的多边形的n个点或面是什么形状或者是否共面没关系,视频是通过坐标变换或者类似帧缓冲之类的手段变换到一个viewport视口上的,只不过视频的长方形四条边(或四个顶点)和其所覆盖的四边形的四条边(或四个顶点)在屏幕上的坐标是重合的,所以看上去视频好像是像贴图被贴上去了一样?
【 在 DoorWay 的大作中提到: 】
: 我粗浅的理解:
: 游戏里的视频贴图——是指的在CS地图里,贴一个图,比如lena的头像吗?
: 那是图(像)。就是一个矩阵,逐像素拷贝到显存里,OpenGL有一套接口,计算缩放与投影等,将矩阵里的每一个像素投影到目标面(成像面,比如台阶面或曲面)。
: ...................
--
FROM 175.190.123.*
先共识场景,你说的“ 游戏里的视频贴图”,到底是啥,
是游戏里的人物角色,还是游戏场景物体,比如房屋的墙,汽车的轮子……
视频是游戏的一部分,还是魔改的,比如在CS地图的墙上贴张你自己的照片,
继而在墙上播放连续变化的图片(一个视频),你叫它“视频贴图”?
【 在 seeeU 的大作中提到: 】
: 谢谢,您说的这句:“总结下,你看到的视频(帧),是逐像素点拉伸、变换渲染的,没有三角面片化。你关心的三角面片与连续光滑的视频帧,没有关系。”
: 我这样理解是否可以:视频帧不是以贴图的方式映射到Quad或者多边形上去的,所以该视频所覆盖的多边形的n个点或面是什么形状或者是否共面没关系,视频是通过坐标变换或者类似帧缓冲之类的手段变换到一个viewport视口上的,只不过视频的长方形四条边(或四个顶点)和其所覆盖的四边形的四条边(或四个顶点)在屏幕上的坐标是重合的,所以看上去视频好像是像贴图被贴上去了一样?
:
--
FROM 124.114.151.*
程序的目的如果是渲染,那么就不存在需要判断是否共面的逻辑。
共不共面,2个三角形都需要走图形管线进行渲染。如果共面会造成渲染结果近似,2个三角形分别渲染的结果也是近似的。
换一种说法,在浮点数领域里面,没有等于的说法,判断两个浮点数所谓『相等』需要用:abs(A-B)< Epsilon
换个方法理解,在计算机的眼里,没有绝对相等的2个浮点数,也就没有所谓『共面』的2个三角形。
程序的目的如果是判断2个三角形是否共面,那是另外一种范畴。
想深入了解,建议看完基础的图形渲染管线的原理,再来讨论。
目前问的问题还是过于外行,图形学还是有技术门槛的,不是问几句就可以了解的。
【 在 seeeU 的大作中提到: 】
: 谢谢
: 那程序中该如何判断n个点(n>3)是否是共面的呢?GPU编程实现不了的话,是不是得在CPU程序中判断这n个点的坐标?比如对任意三个向量做混合积,看行列式是否为0?
: 还有如果n个点的“多边形”不共面?送到GPU里,还是会显示出来吧?只不过是被拆成一个个三角形,还是不共面也会按照实际坐标把这个所谓的“多边形”显示出来?
: ...................
--
FROM 124.127.210.*
就是普通视频,比如NBA游戏的场馆里的大屏幕播放了刚才勒布朗詹姆斯扣篮的回放或者本场精彩镜头集锦,或者NBA本季的宣传片,游戏里经常出现这种
【 在 DoorWay 的大作中提到: 】
: 先共识场景,你说的“ 游戏里的视频贴图”,到底是啥,
: 是游戏里的人物角色,还是游戏场景物体,比如房屋的墙,汽车的轮子……
: 视频是游戏的一部分,还是魔改的,比如在CS地图的墙上贴张你自己的照片,
: ...................
--
FROM 175.190.123.*
就是说程序上如果要实际上判断n点共面,最后也是要设定一个近似的阈值吗?
在blender和3dmax里是可以创造同一个平面上的多边形的吧?它们是怎么处理的呢?
还有obj文件格式里,定义一个面的时候需要包括其顶点,是可以包括n个点(n大于3)的,那如果这n个点如果不在一个平面上,还会被按照实际坐标渲染出来吗?
【 在 sjtuDNA 的大作中提到: 】
: 程序的目的如果是渲染,那么就不存在需要判断是否共面的逻辑。
: 共不共面,2个三角形都需要走图形管线进行渲染。如果共面会造成渲染结果近似,2个三角形分别渲染的结果也是近似的。
: 换一种说法,在浮点数领域里面,没有等于的说法,判断两个浮点数所谓『相等』需要用:abs(A-B)< Epsilon
: ...................
--
FROM 175.190.123.*
最简单的,弄个用opengl绘制四边形的代码例子跑一下,里面要填写x、y、z坐标的
--
FROM 221.220.168.*
每个软件都有自己的职责。
opengl只是渲染程序。他只是把点和对应的颜色经过一系列变换最终送到屏幕。
至于这些点代表什么,是上层软件的事情,opengl不关心。3dmax需要平面,那3dmax自己生成一些平面的点。
至于贴图更简单了,就是把图片放到对应上点上就行了。对应关系这个也是调用者也就是上层软件的事情。
【 在 seeeU 的大作中提到: 】
: 就是说程序上如果要实际上判断n点共面,最后也是要设定一个近似的阈值吗?
: 在blender和3dmax里是可以创造同一个平面上的多边形的吧?它们是怎么处理的呢?
:
: ...................
--来自微微水木3.5.12
--
FROM 140.206.195.*
如果播放的是游戏人物,那跟玩家操控的人物模型一样,是用三位建模软件,手工建立出来的,想象下衣服店里脱掉衣服的模特。
这种模型的数据结构就是大量的三角面片,每个三角面片就是三个顶点,如何把三角面片的表示的人脸显示的光滑,减小三角面片增加分辨率,OpenGL的渲染模式,Smooth是怎么解决光滑的我还不知。
人物的不同动作,连续编辑成路径,就是动画。
表示模型的坐标都是三维的。现在考虑一个问题,显示器是二维的,如何表现三维的运动员?透视,远小近大。要有一套换算,把模型此刻的顶点左标,换算到屏幕1024x768的格子上。
你按下旋转键,视角变了,屏幕(投影面)变了,哪怕人物没动,顶点的坐标没变,刚才的变换也得再算一遍。让你看上去是三维,视角变了。
想通这个,你的显示器屏幕,和游戏场景里的屏幕,就没有区别。游戏里更简单,固定视角。
游戏人物的模型是资源文件,每一时刻的位置动作(编号)都可以用数字存储,
这样就能实现历史回放。比如dota的比赛录像回放。
光秃秃的模型要有肤色、头发、胡子、球衣,可以是提前绘制的模型,也可以是渲染时计算的。
如果游戏里的屏幕,播放真实的NBA比赛,比赛视频已经有了,比如mp4格式。
逐帧读出来,一个内存块,交给OpenGL,计算好目标位置,源的大小、目标屏幕的大小,进行逐像素投影、缩放、绘制。没有三角面片。
我也是粗浅的理解。请大神补充纠正。
【 在 seeeU 的大作中提到: 】
: 就是普通视频,比如NBA游戏的场馆里的大屏幕播放了刚才勒布朗詹姆斯扣篮的回放或者本场精彩镜头集锦,或者NBA本季的宣传片,游戏里经常出现这种
:
--
FROM 1.86.63.*
先区分:验证共面是图形问题,在console程序里也能做;与渲染(OpenGL接口 +显卡)显示是两回事。
验证四个点共面,简单的方法就是,分为两组:abc;bcd.
点构造向量,向量叉乘,是法向量。两个(法)向量判断平行,看叉积是否为0。
cross1 = [ab] x [bc]
cross2 = [bc] x [cd]
c = cross1 x cross2
【 在 seeeU 的大作中提到: 】
: 谢谢,那该如何判断几个点是否共面呢?GPU里做不了这个,在CPU里做?如何做呢?用任意三个向量的行列式=0来验证其共面?
:
--
FROM 124.114.151.*
gpu管道允许的格式只能是点、线、三角形中的一种
3ds max是可以锁定平面或轴的,新生成的点自然就共面了
顶点除了位置坐标(xyz),还有纹理坐标(uv),纹理坐标的u和v范围可以视为[0,1],纹理的高度和宽度范围也归一化为[0,1]。一个uv值对应于纹理上的一个采样数据,采样时可以使用内置的采样算法或自己定制(uv坐标通常和像素不精确对应),超过范围的uv值会按照指定的规则重新映射到[0,1]内
在像素着色器调用前,gpu会判断三角形覆盖了多少个像素,然后根据三角形三个顶点的uv值进行插值生成每个像素的uv值,在像素着色器里可以根据像素uv值对纹理进行采样
纹理中的数据可以是静态图片、动图、视频、cpu生成的、gpu之前渲染得到的等等;其中的数据也可以不是颜色值,而是4维以内的整数、普通浮点数等
【 在 seeeU 的大作中提到: 】
: 就是说程序上如果要实际上判断n点共面,最后也是要设定一个近似的阈值吗?
: 在blender和3dmax里是可以创造同一个平面上的多边形的吧?它们是怎么处理的呢?
: 还有obj文件格式里,定义一个面的时候需要包括其顶点,是可以包括n个点(n大于3)的,那如果这n个点如果不在一个平面上,还会被按照实际坐标渲染出来吗?
: ...................
--
修改:dilemma FROM 114.249.230.*
FROM 114.249.230.*