在opengl中的单个像素内绘制一个三角形

时间:2012-03-09 19:10:17

标签: opengl geometry pixel

是否可以在单个像素内绘制三角形?

例如,当我将三角形顶点的坐标指定为A(0,1),B(0,0)和C(1,0)时。我根本没有看到三角形被渲染。我期待在像素内看到一个小三角形。

我有什么遗失的吗?

3 个答案:

答案 0 :(得分:3)

像素是单个 三角形如何适合单个点?

它是图像的绝对最小单位。

为什么你认为你可以对角渲染半个像素?像素是开启关闭,它不能是任何其他状态。什么OpenGL规范基于假设,大​​多数3D库将决定基于填充多少子像素信息来渲染像素。但是一个像素不能被部分绘制,它可以打开或关闭。像素就像一个灯泡,你可以'照亮一半灯泡。

无论如何,所表示的3D坐标空间不会映射到由监视器上绘制的摄像机的图形平面表示的2D空间。

只有在距离相机特定距离的2D平面中使用特定的相机设置和绘制三角形时,您才能尝试以1:1的方式将3D坐标映射到2D坐标,即使这样也不准确在许多情况下。

子像素渲染,并不意味着你认为它意味着什么,它是一种技术/算法来确定像素的哪些RGB元素点亮以及制作它们的颜色,当有很多像素时点亮,特别是在抗锯齿情况下,在2D光栅化显示中考虑周围的像素。无法部分照亮形状中的单个像素,子像素渲染只是以更微妙的方式改变像素的颜色强度和亮度。这仅适用于LCD显示屏。维基百科文章很好地描述了这一点。

在这种情况下,您永远不能在单个像素中绘制三角形。三角形至少需要3个像素才能显示为可能代表三角形的东西:

■
■ ■

和6个像素表示一个光栅化三角形,表示所有三个边。

■
■ ■
■ ■ ■

答案 1 :(得分:3)

像素是显示器可以显示的最小离散单位。像素只能有一种颜色。

因此,虽然OpenGL可以尝试将三角形渲染到像素的一半,但您将看到的只是填充的像素或未填充的像素。抗锯齿可以使填充的颜色不那么强,但颜色来自整个像素的像素都是实心的。

这就是离散图像的本质。

答案 2 :(得分:0)

  

是否可以在单个像素内绘制三角形?

否!

您可以尝试评估三角形覆盖了多少像素,但是无法仅绘制像素的一部分。像素是光栅化显示设备的最小单位。像素是最小的元素。并且显示设备的像素密度设置可表示分辨率的物理限制。

它背后的数学理论被称为“采样热”,最重要的是你需要知道所谓的奈奎斯特定理。

像素是图片中最终的最小元素也是你无法像在CSI中那样放大图片的原因:纽约,这根本不可能,因为图片中没有更多的信息,因为有像素。 (好吧,如果您有一些额外的信息来源,例如通过组合在较长时间内拍摄的图像并且您可以估计运动,那么它可以将时间信息转换为空间信息,但这是一个不同的故事。)