Articles of 广告牌

如何用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),并没有不动。 让广告牌在天空中追踪以呈现简单的阳光将涉及什么?

如何制作适当的广告牌树? (Unity3D和C#)

我做了一个像Doom,Nukem 3D 3D和Daggerfall这样的2.5D第一人称游戏。 一般来说,我对Unity和游戏开发并不陌生,所以对于某些人来说这很明显,我感到抱歉。 我想要的是让树木的2D精灵像老游戏那样顺利地展示广告牌。 看看这个video,了解我的意思: https : //www.youtube.com/watch?v=xPwGXf8y6XA&t=277s 我已经在http://wiki.unity3d.com/index.php?title=CameraFacingBillboard上尝试过这个建议的解决scheme,它不能按照我想要的方式工作,这是不可思议的,并且不适合它的工作方式。 请帮帮我。

广告牌3D精灵如何影响性能?

我正在阅读关于树木的Unity手册 ,其中一个要求如下: Unity使用优化(例如,广告牌为遥远的树)保持良好的渲染性能… 我打算为自己制作的游戏做自己的广告牌,所以知道我要获得性能优势是很好的了解。 但是,当我尝试在Unity中展示广告牌时,我发现了这些来源: http://wiki.unity3d.com/index.php?title=CameraFacingBillboard http://answers.unity3d.com/questions/20697/how-to-create-billboarding-planes.html http://answers.unity3d。 COM /问题/ 52656 /如何-I-可以创建-的精灵是,总是看-AT-the.html 这一切都表明,做广告牌的方式是对每个对象进行变换,使其面向相机。 (我在官方的Unity文档中找不到太多的广告牌)。 广告牌如何影响性能? 如果在每一帧之前必须将“茂密的森林与数千棵树”变换,为什么会有性能提升呢? 团结是否有内置的原生广告牌着色器? 如果不是这样,那么不会有提示的精灵需要至less与3D场景中绘制的其他对象相同的渲染能力?

为什么我的几何着色器生成的广告牌没有显示给出以下代码?

我的程序是一个雨滴粒子系统。 在处理了一系列降雨粒子的位置之后,我将它们传递给几何着色器,以便为每个位置生成一个广告牌。 如果我用一个简单的方法来生成广告牌(这是一个矩形,而不是一个广告牌),它运行良好,我可以在渲染目标中看到它们。 这个简单的方法certificate了几何着色器的input位置是正确的。 下面的HLSL来源实现这个简单的广告牌。 [maxvertexcount(4)] void GSMAIN( point GS_INPUT input[1], inout TriangleStream<PS_INPUT> SpriteStream ) { //Transform to view space float4 viewposition = mul(float4(input[0].position, 1.0f), WorldViewMatrix); // Emit two new triangles for (int i = 0; i < 4; i++) { // Transform to clip space //g_positions is an array of four deltal vectors in […]

xna:在3D游戏中使用精灵字符的方法?

在3D游戏中有精灵字符的方法? 我正在做一个很像Doom的游戏。 世界是3d,但是物体和角色是二维精灵。 我不是问广告牌的对象。 我问的方法是有一些精灵角色不是总是面向玩家,而是根据角色面对的方式有不同的框架。 例如,当一个敌人向玩家走去时,这是一个正面的2D纹理,当走远时,它是背面的2D纹理。 我以为我读到的一种方式是绘制一个“隐形”的立方体原始图片。 这个3D立方体允许你跟踪角色的方向。 然后你将一个精灵帧应用到立方体的每一面,但是2D纹理只在玩家正在看的一侧绘制。 另一种方式我怀疑我可以做到这一点是在一个建模程序中创建一个3d平面,并将其导入到XNA。 然后使用广告牌方法,以确保飞机总是面对玩家(你看不到边缘)。 根据角色面对的方向,在平面上应用合适的2D纹理(精灵帧)。 我知道这不是Doom如何做的,但请告诉我你对我的想法或如何做到这一点的方法的想法。 谢谢。

JMonkey – 创建健康栏?

如何在JMonkey中创建健康栏? 有一些文件可以帮助吗? 我正在使用JMonkey引擎(JME3)开发游戏,特别是“战舰”。 我想在每艘船上添加健康栏。 对于主要玩家“玩家”,我希望在屏幕的左上角有一个固定位置的健康栏。 对于敌方的舰艇,我想增加一个与每艘敌方战舰一起移动的生命条。 在试图找出这个想法的解决scheme时,我发现每个人都在谈论使用“BillboardNode”来创建一个健康栏。 知道这一点,我开始search什么是“广告牌节点”的意思,并试图find任何文件,可以解释如何使用它。 但是,没有运气。 我不知道我是否错过了一些东西,但我找不到任何文档来帮助。 我find了创建健康栏的代码: https://code.google.com/p/jme-simple-examples/source/browse/JMESimpleExamples/src/com/robotfight/Main.java?spec=svn5a70b9fc75bde6b7213e0d098e263660b5db290a&r=5a70b9fc75bde6b7213e0d098e263660b5db290a 但是,当我尝试在我的代码中使用它,它不起作用。 所以一定有我失踪的东西! 这是我尝试在我的游戏中使用的代码: BillboardControl billboard = new BillboardControl(); Geometry healthbar = new Geometry(“healthbar”, new Quad(4f, 0.2f)); Material mathb = mat.clone(); mathb.setColor(“Color”, ColorRGBA.Red); healthbar.setMaterial(mathb); Ship.attachChild(healthbar); healthbar.center(); healthbar.move(0, 7, 2); healthbar.addControl(billboard);

计算广告牌轮换

我正在试图计算一个matrix,使对象始终面向相机。 目前,我的结果看起来不错,问题是我的原来的广告牌规模不保留(每个广告牌的大小为1/1)。 这是我用这个post所做的 : glm::vec3 look = glm::normalize(camera->getPosition() – objectPosition); glm::vec3 right = glm::cross(up, look); glm::vec3 up2 = glm::cross(look, right); glm::mat4 transform; transform[0] = glm::vec4(right, 0); transform[1] = glm::vec4(up2, 0); transform[2] = glm::vec4(look, 0); transform[3] = glm::vec4(objectPosition, 1); glm::quat q = glm::quat_cast(transform); objectTransformable->setOrientationFromQuat(q); 我试图添加类似的东西,但结果是比例较大的对象: transform = glm :: scale(transform,objectScale); 要恢复,我想从结果matrix中提取方向,将其应用于我的变换对象,如Unity: MyTransform.LookAt(Cam.transform.position, upVector);

以编程方式创建统一的广告牌

在Unity中渲染广告牌的最有效方法是什么? 为了将纹理应用到某个东西,它必须是一个具有Mesh组件的GameObject ? 在这种情况下,我最好的办法是创建一个具有给定纹理的Plane预制件,并在运行时Instantiate(…) 。 或者是否有某种我应该用的“广告牌”原语?

广告牌限制在一个轴(圆柱形)

我已经成功地为广告牌效果创建了GLSL着色器。 我想调整这个限制广告牌到一个任意的轴,即一个billboarded方形只能围绕y轴自转。 我使用Y轴作为例子,但基本上我想这是一个任意轴。 任何人都可以告诉我如何修改我现有的着色器,或者如果我需要从头开始,指向我可能有用的一些资源? precision mediump float; uniform mat4 u_modelViewProjectionMat; uniform mat4 u_modelMat; uniform mat4 u_viewTransposeMat; uniform vec3 u_axis; // <———— !!! the arbitrary axis to restrict rotation around attribute vec3 a_position0; attribute vec2 a_texCoord0; varying vec2 v_texCoord0; void main() { vec3 pos = (a_position0.x * u_viewTransposeMat[0] + a_position0.y * u_viewTransposeMat[1]).xyz; vec4 position = vec4(pos, […]

现代OpenGL,广告牌,阿尔法透明度

在现代OpenGL中渲染广告牌时,我遇到了一些透明度问题。 我已经创建了两个广告牌精灵,每个都有alpha透明度,仅用于testing。 当我渲染两个精灵而没有任何透明度的时候,这一切都按预期工作: 每当我使用Alpha透明渲染两个精灵时,其中一个精灵的一部分被另一个精灵阻挡: 起初,虽然它和渲染顺序有关,所以我试图通过在第一个渲染之前渲染第二个Sprite来改变顺序,但是问题出在第一个Sprite上: 通过调用glEnable(GL_BLEND);来启用混合glEnable(GL_BLEND); 在申请的开始。 我觉得我已经尝试了OpenGL中存在的每个glBlendFunc()组合( glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)等),但没有任何帮助。 我也曾尝试通过调用glDepthMask(GL_FALSE);禁用glDepthMask(GL_FALSE); 但是这也没有帮助。 我在渲染时使用VBO(每个精灵一个)。 在顶点和片段着色器中,除了设置顶点位置,纹理坐标和像素颜色之外,我没有做任何其他的事情。