Questions tagged «software-rendering»

8
与软件渲染相比,OpenGL,SFML和SDL有什么优势?
我开始观看Handmade Hero系列视频,其中Casey Muratori在不使用框架等的情况下创建了一个游戏引擎。昨天我到了那儿,他展示了如何在屏幕上绘制图像。据我了解,他只是分配了一些内存,该内存与他要绘制的屏幕大小一样大。然后,他创建了一个位图,然后将其传递到分配的缓冲存储器中,并使用特定于操作系统的功能将其绘制到屏幕上。 这似乎很简单。我曾经使用GameMaker,后来改为Love2D,并与Sprite Kit一起工作了一些,但我一直想知道在有时令人困惑的图层下到底发生了什么。 既然如此,为什么当您只需要分配一些缓冲区,传递位图并将其绘制到屏幕上时,为什么还要使用图形库(OpenGL,SFML,SDL等)呢? 如果要在屏幕上绘制不同的内容,只需将它们写入位图,然后将其传递到缓冲区中。我对编程很陌生,但这对我来说似乎很简单。如果我错了,请纠正我。

3
如何进行软件渲染?
我想探索基于实时软件的栅格化。我知道这些天一切都在朝着GPU迈进,但是在一些游戏中使用软件渲染器仍然有意义。 例如:Voxeltron Voxatron是一个竞技场射击游戏,发生在一个由体素(小方块之类)构成的世界中。游戏中的所有内容均以虚拟的128x128x64体素显示器显示,包括菜单和玩家清单。如果仔细观察,有时会看到库存(得分/生命/弹药)在地面上的某些物体上蒙上阴影。 我长期从事体素渲染和建模工具的研究,其最终目标是制作大型探险冒险游戏。大约半年前,它与我在Conflux的舞台射击游戏中所做的工作融合在一起,这就是结果。 从本质上讲,这是一个非常简单的游戏-大多只是Robotron摆在一个3D可破坏世界中,带有愚蠢的生物。我不确定可破坏性对游戏玩法的影响有多大,但是炸开墙壁确实很有趣。我还添加了一个实验性的围墙拾音器,您可以使用该拾音器来构建屏障以躲避可怕的怪物。 游戏发生在一小部分竞技场上。其中一些客房设有固定动作的房间,位于Knightlore和Smash TV之间。这是一些原始的基于冒险的设计潜入其中,并且是创建主题环境的借口。 特征: 具有柔和阴影的自定义软件渲染。 内置声音和音乐合成器(也用于制作预告片音乐)。 播放和游戏后录制。


2
在4D同构空间中进行裁剪时,GPU实际做什么的详细信息?
我正在通过实现一个微型软件渲染器来学习可编程渲染管道。我尝试以“硬件”样式实现它。但是,我对GPU管道不熟悉,并遇到了一些均质裁剪的问题。 均匀剪裁空间包含一个w变量,该变量在每个顶点处都不同。每个顶点对象在其自己的裁剪空间中是否是同质坐标(在投影矩阵和均质除以w之间)?如果是这样,如何截断比平截头体更近或什至在相机后方延伸的线和三角形(即w <= frustum_znear)? 更新:该线程说,齐次空间中的裁剪直接是4D齐次空间中的交集问题。表示交点为p_vec4 = t * point1_vec4 + (1 - t) * point2_vec4。假设我在4D同构空间中有P0(-70, -70, 118, 120)和P1(-32, -99, -13, -11),且与交点plane w = -z(在NDC中为z = -1)为(-35, -96, -1, 0.9) t = 0.99,如何在NDC空间中获得相应的顶点对象? 一旦获得正确的交点,是否应该在顶点着色器产生的顶点对象之间进行插值以获取新的顶点对象?

1
Z缓冲区的深度插值,带有扫描线
我必须编写自己的软件3d栅格化器,到目前为止,我已经能够将由三角形构成的3d模型投影到2d空间中: 我旋转,平移和投影点,以获得每个三角形的二维空间表示。然后,我取了3个三角形点,并实施了扫描线算法(使用线性插值法)以找到沿三角形边缘(左右)的所有点[x] [y],以便可以水平扫描三角形,一行一行地填充像素 这可行。除了我还必须实现z缓冲。这意味着,知道三角形的3个顶点的旋转平移后的z坐标后,我必须对使用扫描线算法找到的所有其他点的z坐标进行插值。 这个概念似乎很清楚,我首先通过以下计算得出Za和Zb: var Z_Slope = (bottom_point_z - top_point_z) / (bottom_point_y - top_point_y); var Za = top_point_z + ((current_point_y - top_point_y) * Z_Slope); 然后,对于每个Zp,我都会在水平方向执行相同的插值: var Z_Slope = (right_z - left_z) / (right_x - left_x); var Zp = left_z + ((current_point_x - left_x) * Z_Slope); 并且如果当前z在该索引处比前一个z更接近查看器,则将颜色写入颜色缓冲区,并将新z写入z缓冲区。(我的坐标系是x:左->右; y:上->下; z:脸部->电脑屏幕;) 问题是,它陷入了困境。该项目在这里,如果您选择“ …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.