- 主题:外行问一个关于openGL和计算机图形学的一个的问题
看了点openGL的文档,发现这个问题:
似乎四边形和多边形最后都是被GPU拆为三角形处理显示的
那么实际上GPU是无法真正知道三个以上的点是否真正的共面吧?
如下说法是否正确?
比如说有四个点的三维坐标,GPU如果想验证四个点是否共面,就要增加验证步骤消耗细算资源,而且计算机储存的坐标数据类型(比如为float)精度有限,也会很难真正验证成功。所以计算机就舍弃这个验证共面的步骤,一律把这四个点作为两个三角形来显示,不管其是否真的是一个四点共面的四边形
如果显卡显示出来的都是一个个三角形,那么游戏里的视频贴图是怎么实现的呢?视频都是长方形的,是怎么贴合到显存里组成一个长方形的两个三角形上的呢?
--
FROM 175.190.123.*
我粗浅的理解:
游戏里的视频贴图——是指的在CS地图里,贴一个图,比如lena的头像吗?
那是图(像)。就是一个矩阵,逐像素拷贝到显存里,OpenGL有一套接口,计算缩放与投影等,将矩阵里的每一个像素投影到目标面(成像面,比如台阶面或曲面)。
三角面片化,是图(形)。图形是参数化的,用图形api生成,比如loft或者sweep,或者大量点组成的三角网格mesh,这是一套数据结构。生成后要交给显卡渲染,要再转换成另一套数据结构,就是三角面片化(Tessellation),变成一系列顶点,OpenGL只认这个,渲染填充。
总结下,你看到的视频(帧),是逐像素点拉伸、变换渲染的,没有三角面片化。
你关心的三角面片与连续光滑的视频帧,没有关系。
请懂的大神纠正我。谢谢。
【 在 seeeU 的大作中提到: 】
: 看了点openGL的文档,发现这个问题:
: 似乎四边形和多边形最后都是被GPU拆为三角形处理显示的
: 那么实际上GPU是无法真正知道三个以上的点是否真正的共面吧?
: ...................
--
修改:DoorWay FROM 61.185.195.*
FROM 61.185.195.*
请参考vertex shader和fragment shader
【 在 seeeU 的大作中提到: 】
: 看了点openGL的文档,发现这个问题:
: 似乎四边形和多边形最后都是被GPU拆为三角形处理显示的
: 那么实际上GPU是无法真正知道三个以上的点是否真正的共面吧?
: ...................
--
FROM 98.46.111.*
GPU是只基于三角形处理,其他形状都是三角形拼接而成。
GPU不需要知道三点以上是否共面,共面不共面对渲染没任何影响。
【 在 seeeU 的大作中提到: 】
: 看了点openGL的文档,发现这个问题:
: 似乎四边形和多边形最后都是被GPU拆为三角形处理显示的
: 那么实际上GPU是无法真正知道三个以上的点是否真正的共面吧?
: ...................
--
FROM 49.93.112.*
gpu在渲染三角形的时候不会关心三角形之间的关系
用户渲染矩形的时候需要保证送进去的顶点位置正确
如果刚接触3d,推荐看
Introduction to 3D Game Programming with DirectX 11
基础知识解释得很清楚,和opengl是相通的
不要看dx12版本的,dx12涉及太多底层细节
【 在 seeeU 的大作中提到: 】
: 看了点openGL的文档,发现这个问题:
: 似乎四边形和多边形最后都是被GPU拆为三角形处理显示的
: 那么实际上GPU是无法真正知道三个以上的点是否真正的共面吧?
: ...................
--
修改:dilemma FROM 114.249.230.*
FROM 114.249.230.*
还是有影响的吧,比如顶点的法线方向,
【 在 lvsoft 的大作中提到: 】
: GPU是只基于三角形处理,其他形状都是三角形拼接而成。
: GPU不需要知道三点以上是否共面,共面不共面对渲染没任何影响。
:
--
FROM 116.230.161.*
看了点openGL的文档,发现这个问题:
似乎四边形和多边形最后都是被GPU拆为三角形处理显示的
那么实际上GPU是无法真正知道三个以上的点是否真正的共面吧?
————————————————————————————————————————————————
GPU不需要知道3个以上的点是否共面。
之所以选三角形的原因是:
(1)三角形是最基本的多边形,并且任何其他的多边形都可以拆分为三角形。
(2)三个点可以保证在一个平面,如果是四边形四个点就不能保证。
(3)它可以很好地用叉积判断一个点是不是在三角形内部(三角形的内外定义特别清晰)-这个在光栅化时特别重要
如下说法是否正确?
比如说有四个点的三维坐标,GPU如果想验证四个点是否共面,就要增加验证步骤消耗细算资源,而且计算机储存的坐标数据类型(比如为float)精度有限,也会很难真正验证成功。所以计算机就舍弃这个验证共面的步骤,一律把这四个点作为两个三角形来显示,不管其是否真的是一个四点共面的四边形
——————————————————————————————————————————————————————————————————————————
同上段,不存在『想验证四个点是否共面』这件事
不管共不共面,渲染任何形状,为获得颜色,需要的是法线方向和深度。
如果显卡显示出来的都是一个个三角形,那么游戏里的视频贴图是怎么实现的呢?视频都是长方形的,是怎么贴合到显存里组成一个长方形的两个三角形上的呢?
——————————————————————————————————————————————————————————————————
这个问题过于业余了,可以了解一下光栅化和基础图形管线。
最终表现的形状和尺寸,和你的视口有关,即这个视口可以是长方形也可以是圆形。
视口就相当于你眼睛前面的罩了一张有洞的纸,这个洞的形状决定你看到的长方形还是圆形。
其他的你问的驴唇不对马嘴,我也不知道怎么回答。
--
修改:sjtuDNA FROM 124.127.210.*
FROM 124.127.210.*
谢谢,那该如何判断几个点是否共面呢?GPU里做不了这个,在CPU里做?如何做呢?用任意三个向量的行列式=0来验证其共面?
【 在 lvsoft 的大作中提到: 】
: GPU是只基于三角形处理,其他形状都是三角形拼接而成。
: GPU不需要知道三点以上是否共面,共面不共面对渲染没任何影响。
:
--
FROM 175.190.123.*
谢谢
“用户渲染矩形的时候需要保证送进去的顶点位置正确”,如果我送进去的几个顶点不是共面的?opengl或者GPU也会把这个所谓的Quad四边形或者polygon多边形拆分为一个个三角形渲染出来吗?
【 在 dilemma 的大作中提到: 】
: gpu在渲染三角形的时候不会关心三角形之间的关系
:
: 如果刚接触3d,推荐看
: ...................
--
FROM 175.190.123.*
谢谢
那程序中该如何判断n个点(n>3)是否是共面的呢?GPU编程实现不了的话,是不是得在CPU程序中判断这n个点的坐标?比如对任意三个向量做混合积,看行列式是否为0?
还有如果n个点的“多边形”不共面?送到GPU里,还是会显示出来吧?只不过是被拆成一个个三角形,还是不共面也会按照实际坐标把这个所谓的“多边形”显示出来?
【 在 sjtuDNA 的大作中提到: 】
: 看了点openGL的文档,发现这个问题:
: 似乎四边形和多边形最后都是被GPU拆为三角形处理显示的
: 那么实际上GPU是无法真正知道三个以上的点是否真正的共面吧?
: ...................
--
FROM 175.190.123.*