python渲染_Python三维软件渲染

news/2024/11/23 1:31:00/

我决定尝试在Python中使用Pygame进行一个实验,这样我就可以通过pixelarray绘制到屏幕上。我决定按照this article来钻研3D的数学

总之,我已经实现了每一个功能。我建立了矩阵和向量的数学运算,并有一些问题,但经过广泛(广泛的)测试,这些运算现在完全可以工作了(点、十字、法线、标量、平移、旋转等)。我花了相当多的时间在微软的网站上阅读这些函数如何工作的文档。因此,我的解释如下:@staticmethod

def lookAtLH(cameraTarget, cameraPosition, cameraUpVector):

zaxis = Vector.norm((cameraTarget - cameraPosition))

xaxis = Vector.norm(Vector.threeCross(cameraUpVector, zaxis))

yaxis = Vector.threeCross(zaxis, xaxis)

return Matrix ([[xaxis[0], yaxis[0], zaxis[0], 0.0],

[xaxis[1], yaxis[1], zaxis[1], 0.0],

[xaxis[2], yaxis[2], zaxis[2], 0.0],

[-Vector.dot(xaxis, cameraPosition), -Vector.dot(yaxis, cameraPosition), -Vector.dot(zaxis, cameraPosition), 1.0]])

@staticmethod

def PerspectiveFovRH(FOV, aspectRatio, NP, FP):

D = (NP - FP)

h = (1.0 / (math.tan(FOV / 2.0)))

w = (h / aspectRatio)

try:

one = FP/D

except ZeroDivisionError:

one = 0.0

try:

two = ((NP*FP)/D)

except ZeroDivisionError:

two = 0.0

return Matrix ([[w, 0.0, 0.0, 0.0],

[0.0, h, 0.0, 0.0],

[0.0, 0.0, one, -1.0],

[0.0, 0.0, two, 0.0]])

@staticmethod

def RotationYawPitchRoll(xRot, yRot, zRot):

zaxis = Matrix([[math.cos(zRot), math.sin(zRot), 0.0, 0.0],

[-math.sin(zRot), math.cos(zRot), 0.0, 0.0],

[0.0, 0.0, 1.0, 0.0],

[0.0, 0.0, 0.0, 1.0]])

yaxis = Matrix([[math.cos(yRot), 0.0, -math.sin(yRot), 0.0],

[0.0, 1.0, 0.0, 0.0],

[math.sin(yRot), 0.0, math.cos(yRot), 0.0],

[0.0, 0.0, 0.0, 1.0]])

xaxis = Matrix([[1.0, 0.0, 0.0, 0.0],

[0.0, math.cos(xRot), math.sin(xRot), 0.0],

[0.0, -math.sin(xRot), math.cos(xRot), 0.0],

[0.0, 0.0, 0.0, 1.0]])

return ((xaxis * yaxis) * zaxis)

其他的都和文章完全一样。然而,当我插入相同的点时,我观察屏幕,只看到一个随机的点斜斜斜地斜放在屏幕上。在使用一些print语句以数学方式观察过程之后,从最终生成的3d向量中提取的x和y似乎包含了一些非常大的数字,这些数字明显被剪裁(根据文章中提到的裁剪操作)而不是在屏幕上绘制的。在

我唯一的猜测是,当微软网站声明他们先执行Z轴旋转,然后x轴旋转,然后y轴旋转时,这是完全错误的(除非左手坐标系的旋转遵循不同的排序规则)。而且,即使是尝试这个或任何其他组合,我也没有得到任何结果。我知道绘图代码是可行的,我也知道矩阵和向量代码是可行的,但我猜这是数学问题?在

另一个潜在的问题代码可能是我实现的Vector3.TransformCoordinate函数。我猜这个函数只是从x,y,z坐标创建一个4x1矩阵,将w设置为1,然后将列矩阵乘以4x4变换矩阵。最后,得到的列矩阵的x和y分量将是像素的假定x和y位置。但是如果这个函数不正确的话,我可能不明白这个函数的真正作用。在

正如我所说,一切都和文章完全一样(如果它是用Python而不是C编写的话)。我发布的代码在数学上似乎是错误的。不是那样,就是我疯了。这几天我真的一次又一次地回顾了这件事。从字面上说,任何帮助都将被感激。在

编辑:以下是函数项目的Python版本:

^{pr2}$

编辑:这里是Render()函数:def Render(self, camera, meshes):

i = j = 0

meshList = [meshes]

viewMatrix = Matrix.lookAtLH(camera.Position, camera.Target, Vector([0.0, 1.0, 0.0]))

projectionMatrix = Matrix.PerspectiveFovRH(0.78, float(self.front_buffer.get_width())/float(self.front_buffer.get_height()), 0.01, 1.0)

for mesh in meshList:

worldMatrix = (Matrix.RotationYawPitchRoll(mesh.Rotation[0],

mesh.Rotation[1],

mesh.Rotation[2])

* Matrix.Translate(mesh.Position))

transformMatrix = worldMatrix * viewMatrix * projectionMatrix

for vector in mesh.Vertices:

point = self.Project(vector, transformMatrix)

self.DrawPoint(point)


http://www.ppmy.cn/news/700478.html

相关文章

Unity3D使用透明视频,解决Pr导出WebM毛边问题

1. 安装插件。 在Pr中安装导出WebM格式所需的Pr插件 https://www.fnordware.com/WebM/ 本文使用插件版本。 安装步骤比较简单。安装结束需要重启PR。 2. 导入素材。 打开PR,导入带透明通道格式的MOV文件。如果视频文件有音频合成的需要可以一并导入。 3. 内容调…

C4D-学习笔记-4-渲染(ProRender渲染介绍)

HDR天空贴图旋转 选中材质,坐标,就可以旋转了。 平行光/无限光 可以通过旋转来调整平行光的角度。 平行光没有投影 解决办法,左上角选项,投影,打开 渲染器差异 标准:标准渲染器物理:更真…

pr 文件结构不一致_用pr制作了视频,输出后发现画面都被压扁了,求教是什么原因,怎么解决啊~我没有改变它的原画面比例...

答:有可能是你的项目文件的帧比率设置错误。或者你的项目文件比例错误。也有可能是在输出时对上述参数设置有误。 保险的办法就是将你项目文件帧比率设置成1,即方形像素,然后使用素材,如果素材变形,手动将其调整至正常…

【解决方法】Pr导出H.264格式编译错误代码3

问题描述 第一次完成Pr剪辑&#xff0c;用MP4对应格式H.264时&#xff0c;不能够导出&#xff08;文件<100Mb排除文件过大原因&#xff09;&#xff0c;弹出窗口&#xff1a;编译影片时出错&#xff0c;导出错误&#xff0c;完成渲染时出错&#xff0c;显示选择器9&#xf…

解决Pr, AE在渲染时输出出错的问题

这几天在家里折腾图片、视频处理软件&#xff0c;有Adoba全家桶&#xff0c;像什么Pr, AE, PS,LR,LRT等&#xff0c;还有手机端的VUE,Plorra, VSCO, Plotagraph, MOLDIV, Hyperlapse, PICSPLAY等&#xff0c;各种折腾。在这里对出现的问题做一下记录&#xff0c;方便以后制作。…

怎么搭建个人小型渲染农场?搭建渲染农场需要准备什么?

渲染农场是众多机器组成的渲染集群&#xff0c;通常用来渲染你的单帧效果图或动画项目&#xff0c;我们借助渲染农场的力量&#xff0c;可以满足3D项目交期时间迫在眉睫的需求&#xff0c;当你试着在自己的机器上渲染一个复杂的动画项目时&#xff0c;可能需要几十小时的等待时…

关于PR硬件加速报错 错误代码3解决办法

1.设备管理器禁用集显 2.PR 编辑-首选项-媒体 硬件加速编码&#xff0c;取消INTER的✓。保存重启PR. 如果这个不行。用下面这个方法 把PR设置成管理员运行。

PR导出错误怎么办?解决PR导出视频提示“编译影片时出错“ GPU渲染错误 错误代码:-1609629695

有位用户在使用PR模板制作视频时&#xff0c;遇到PR导出出错的问题&#xff0c;问题描述&#xff1a;编译影片时出错&#xff0c;加速渲染器错误”&#xff08;如下图所示&#xff09; 编译影片时出错。 GPU渲染错误 无法处理帧。 这部分因视频内容不同而出错提示不同&…