Articles of 食人魔

不可见时绘制角色轮廓

我有一个网格代表我的性格。 当其他物体从相机的视野中阻挡时,我想给它一个部分透明的灰色轮廓。 我使用Ogre3D和GLSL作为着色语言,但这是一个相当技术/语言不可知论的问题。

如何用Ogre3d创建一个太阳广告牌

我一直在与一些不同的引擎一起努力编写我自己的项目。 而不是重写整个渲染器,等我使用Ogre3d。 首先,我试图通过日/夜周期实现一个非常基本的场景。 我创造了一架飞机,在飞机上增加了一个简单的模型来模拟地面和物体。 我还创造了一个方向灯,我旋转模拟一个移动的太阳。 // Add a sunlight sunNode = OgreFramework::getSingletonPtr()->m_pSceneMgr->getRootSceneNode()->createChildSceneNode("sunNode"); sunNode->setPosition(0,0,0); sun = OgreFramework::getSingletonPtr()->m_pSceneMgr->createLight("Sun"); sun->setPosition(0,0,0); sun->setType(Ogre::Light::LT_DIRECTIONAL); sun->setDiffuseColour(Ogre::ColourValue(0.7f,0.7f,0.7f)); sun->setSpecularColour(Ogre::ColourValue(0.7f,0.7f,0.7f)); sun->setDirection(Ogre::Vector3(0,0,1)); sunNode->attachObject(sun); 在主循环中,在渲染之前,我将sunNode旋转为: // Rotate the sun sunNode->pitch(Ogre::Degree(0.05), Ogre::Node::TS_LOCAL); 这一切都像预期的一样。 不过,我接着为了让太阳在天空中移动而增加了一个广告牌给太阳节点。 创建广告牌,设置纹理,添加广告牌并附加到sunNode,是非常直接的,然而,当我编译和运行应用程序,广告牌只是坐在灯光位置(0,0,0),并没有不动。 让广告牌在天空中追踪以呈现简单的阳光将涉及什么?

Blender不会将纹理(材质)导出到OGRE3D .mesh

我正在使用blender2ogre脚本将模型从BLENDER导出到OGRE3D 。 devise输出是一个单一的.mesh文件,但我知道应该也有materials脚本,我应该复制到我的食人魔path。 问题是搅拌机不为我导出这些文件它只导出1个网格文件(在我join所有对象后)这是模型 。 在搅拌机看起来很好,但在我的演示食人魔应用程序,它看起来像: 我可以在这里使用一点帮助。

计算Ogre3d中的骨骼变换,如何获取局部骨骼坐标

我正在使用ogreassimp转换器转换FBX文件,并与骨骼骨骼..但现在我有一个animation网格,相对于另一个对象旋转..第一个对象应该独立旋转到另一个对象..但是什么我看到的是,两个对象旋转.. 这是如何计算和作者的评论 // DefBonePose a matrix that represents the local bone transform (can build from Ogre bone components) // PoseToKey a matrix representing the keyframe translation // What assimp stores aiNodeAnim IS the decomposed form of the transform (DefBonePose * PoseToKey) // To get PoseToKey which is what Ogre needs we'ed have to build the […]

Ogre3d 2.1 – 如何在网格上应用纹理?

我已经search论坛,并试图阅读Ogre 2.1样本,但我仍然没有线索如何应用网格上的纹理🙁 在这里,我迄今为止做了什么。 我使用Easy Ogre Exporter导出场景(实际上我只需要模型和纹理)。 我得到了以下文件: modelRoot.mesh modelRoot.skeleton model.material model.tga 注意:我也使用OgreMeshTool_d.exe将网格从v1升级到v2。 我把这个模型渲染成Ogre: 在文件resources2.cfg中: [Essential] Zip=../Data/DebugPack.zip 我将模型文件(我在上面的步骤1中从Easy Ogre Exporter获得的4个文件)添加到DebugPack.zip文件中。 我使用这个代码将模型添加到Ogre场景中 void MeshHelper::CreateMesh(Ogre::String szFileName, Ogre::Vector3* scale) { /*Bring the mesh to scene*/ m_meshItem = m_sceneManager->createItem(szFileName, Ogre::ResourceGroupManager:: AUTODETECT_RESOURCE_GROUP_NAME, Ogre::SCENE_DYNAMIC); m_meshSceneNode = m_sceneManager->getRootSceneNode(Ogre::SCENE_DYNAMIC)-> createChildSceneNode(Ogre::SCENE_DYNAMIC); m_meshSceneNode->attachObject(m_meshItem); if (nullptr != scale) m_meshSceneNode->scale(scale->x, scale->y, scale->z); } … meshHelper.CreateMesh("modelRoot.mesh", &meshScale); 但我只能渲染模型没有质感:( 请帮我把这些纹理应用到我的模型中 […]

透明度着色器问题

如下图所示,我遇到了片段着色器的问题。 我不想渲染图像中的红色部分,我必须顺时针和逆时针通过哪些select,如果小于0,我会得到法线与照相机位置的点积。我设置了一个透明片段否则放弃在这里的fargment是着色器如在图片中,我看到两个重叠的面孔..我想放弃这种效果..我只是想看看我的眼睛看不是看到两个面重叠,如在图片#版本100 precision mediump float; varying float lightDiffuse; void main() { float light = ( 1.0 – lightDiffuse) * 0.5; vec3 lightColor = vec3(0.0,1.0,1.0); vec3 diffuseColor = lightColor * light ; vec4 c; if(lightDiffuse <0.0 ) { // back faces, opaque // front faces, very transparent c = vec4(diffuseColor, 0.2); } else { discard; } […]

我将如何成功地分离vector来提高游戏性能?

好,所以我有一个在我的游戏中产生的所有怪物的vector。 所有这些怪物都在一个单一的vector,并根据他们是在什么区域相对于玩家的区域“活跃”。 如果玩家与怪物处于同一个区域,那么让怪物四处移动并采取行动,例如攻击其他怪物或玩家。 这一切都是在一台非常强大的电脑上完成的:我的主电脑。 -但- 如果我想在我的中端计算机上使用这个游戏,游戏运行稳定的2 FPS(主要在50+以上) 我试图把vector分割成vector数组vector SpawnList来作为一个简单的例子来vector SpawnList[100] 现在使用这个代码,怪物根据它们的区域在不同的向量中(区域是怪物被生成的区域) 注意:我使用Ogre3D渲染物理的bulletPhysics,我还没有想出一个方法来分割怪物的渲染。 而随着这个新的想法,我的主电脑甚至面临严重的减速。 我想知道如果可能的载体已经被错误地创建或不是一个好主意有一个向量的数组。 有没有更好的方法把怪物集合在一起,在任何一台电脑上,性能几乎是最高的? 编辑:我已经剖析了我的代码,这里是更新的结果。 我希望他们对这种情况有所帮助: http : //pastebin.com/v0PFQf0X

拆分vector与matrix符号进行转换

像Ogre这样的渲染引擎更喜欢使用一个单独的基于vector的符号来进行如下的变换 分裂vector记数法:网格变换由比例向量= sx,sy,sz表示 转换向量= tx,ty,tz 旋转四元数Vector = w,x,y,z matrix符号:还有其他的引擎简单地使用networking组合变换matrix。 第一个符号与第二个符号有什么优点? 另外,对于animation插值,它是否在第一个表示法中起作用,即在各个组件之间进行插值并使用插值的零件来获得网格变换? 这是另一个优点吗?

计算着色器中从查看器到对象的距离

早上好, 我正在通过创建本文中概述的球形广告牌技术。 我正在尝试创建一个着色器,用于计算从相机到场景中所有对象的距离,并将结果存储在纹理中。 我一直得到一个完全黑色或白色的纹理。 这是我的问题: 我认为从食人魔自动发送到顶点着色器的位置是在对象空间中? gpu将顶点着色器的输出位置发送到片段着色器时进行插值。 它是否对我的深度计算执行相同操作,还是需要将该计算移至片段着色器? 有没有办法debugging着色器? 我没有错误,但我不知道我得到我的参数正确传递到着色器。 这是我的着色器代码: void DepthVertexShader( float4 position : POSITION, uniform float4x4 worldViewProjMatrix, uniform float3 eyePosition, out float4 outPosition : POSITION, out float Depth ) { // position is in object space // outPosition is in camera space outPosition = mul( worldViewProjMatrix, position ); // calculate distance from […]

闵。 Ogre3d中聚光灯的距离?

我有一个简单的场景,只有一个空盒子。 在那个盒子里,我把相机连接到一个场景节点,用户可以移动(平移/旋转)。 另外,聚光灯连接到相机的场景节点,面向与相机相同的方向。 所以当相机移动时,光线也会移动。 m_pCamera = m_pSceneMgr->createCamera("Camera"); m_pCamera->setNearClipDistance(0.01); m_pCamNode->attachObject(m_pCamera); Light* spotLight = m_pSceneMgr->createLight("spotLight"); spotLight->setType(Light::LT_SPOTLIGHT); spotLight->setDiffuseColour(1, 1, 1); spotLight->setSpecularColour(1, 1, 1); spotLight->setSpotlightRange(Degree(50), Degree(100)); spotLight->setSpotlightNearClipDistance(0); spotLight->setDirection(m_pCamera->getDirection()); m_pCamNode->attachObject(spotLight); 所以,这基本上正常工作。 但是有一个问题:一旦用户将相机移动到盒子的一侧,突然全黑,我看不到任何东西。 我确定相机没有穿过盒子的一面,它仍然在盒子里面。 所以问题似乎是,光线太靠近物体时,光线不“起作用”,就好像物体(在我的情况下是箱体一侧)不再reflection光线。 有任何想法吗?