Articles of graphics

如何使用个性化的投影matrix来渲染模型?

我正在创造一个有很高的精灵需求的游戏。 Out团队正在考虑使用3D模型自动化精灵世代。 问题是我们有一个非常特别的主题图预测: 我们已经建立了一个很好的投影matrix。 问题是现在的3D渲染器没有一个使用自定义matrix的选项。 这种问题是如何处理的?

如何在天际创造一个魔法球?

我将如何在Unity3D的Skyrim中创建魔法天体,看起来像魔法菜单? 这是我心目中的: Orb Image 并从0:09-0:13: video的video效果

Moai:将图像剪裁成多边形

我正在使用Moai SDK 。 我有一个图像和一些随机的凸二维多边形。 我只想显示这些多边形内的图像的部分。 这是一个示例图像: 同样的,只显示在多边形的位置: 我怎样才能做到这一点?

XNA模糊运动图像

为什么XNA模糊在两次抽奖之间移动less于1px的图片? 这很烦人,因为一切都看起来很模糊。 有没有办法禁用它? 我已经尝试将spritebatch的SamplerState的SamplerState设置为PointWrap的Begin函数,但是它将图像包装为像素,因此它们移动起伏不定。 有什么建议么? 谢谢! 我的SpriteBatch的Begin函数: spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend); 编辑 : public class Image:IDisplay { public Texture2D texture; private BaseModel model; private Vector2 position; private Util.DISPLAY_LAYERS layer; public Image(String asset, BaseModel _model) { model = _model; texture = Main.current.Content.Load<Texture2D>(asset); DisplayManager.add(this, model.layer); } } 这就是Image类的样子(没有附加函数),这就是被调用的draw函数。 public void Draw(SpriteBatch batch) { if (model== null) { batch.Draw(texture, position, […]

如何绘制或翻译成世界空间?

我一直在使用OpenGL,但有一些概念,我找不到答案。 我想像下面这样在分隔符旁边画出三个GL_QUADS: 1 [2] [3] 我知道GL_QUADS已被弃用,但对于这个问题,我想尽管如此。 每个四元组都有自己的颜色,第一个是红色,第二个绿色和第三个蓝色。 [R] [G] [B] 我的代码: void display() { glClear(GL_COLOR_BUFFER_BIT); GLfloat vertices[] = { -1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 3, -1, 3, 1, 1, 1, 3, -1, 5, -1, 5, 1, 3, 1 }; GLfloat colors[] = { 1, 0, 0, 1, 0, 0, 1, […]

顶点不在2D空间中绘制

我很快就开始自学DirectX,遇到了一个我自己搞不清楚的问题。 我试图建立我自己的字体系统,所以我可以在2D屏幕上绘制string。 直到现在,我已经设法创建一个函数,我只需要传递string和屏幕空间位置,并且它会生成/设置缓冲区等的所有顶点(四边形,我绘制字体的某个部分纹理)。 当我在3D空间中绘制这些顶点时,一切看起来像它应该是。 (忘记隐藏立方体)只要我尝试切换到2D,我只是得到一个充满蓝色backgroundcolor的窗口。 切换到2D我做了以下事情: graphics.context->ClearDepthStencilView(graphics.depthStencilView, D3D11_CLEAR_DEPTH, 1.0f, 0); context->OMSetDepthStencilState(depthDisabledStencilState, 1); WVP = XMMatrixOrthographicLH((float)mWidth, (float)mHeight, 0.0f, 1.0f); cbPerVert.WVP = XMMatrixTranspose(WVP); cbPerVert.World = XMMatrixTranspose(World); context->UpdateSubresource( cbPerVertexBuffer, 0, NULL, &cbPerVert, 0, 0 ); context->VSSetConstantBuffers( 0, 1, &cbPerVertexBuffer ); 我的问题是现在我在这里做错了。 如果顶点正在生成和绘制正确,afaik我所要做的就是将它们投影到屏幕空间,并禁用深度缓冲区,这是我在这里做的。顺便说一句:我随机尝试用2D设置绘制立方体,并正确绘制..非常感谢帮助:)

计algorithm线高度图的问题

到目前为止,我一直使用正常的平均值来计算我的顶点在我的高度图中的法线,具有良好的graphics结果(见图片),但速度非常慢。 随着图像大小的增加,计算时间呈指数增长。 所以我想尝试实现这个algorithm,但不是很好。 我试图绕过变数一点,并尝试不同的组合,但似乎没有工作。 似乎在经常出现的是这种阴影线模式,我到处都是(图片有点黑,但我希望你能看到图案)。 我最好的猜测,为什么这不工作是因为algorithm没有考虑到邻居顶点2计算(见图片,蓝色是我们正在计算正常的vertice,绿色是在algorithm中使用的,红色isnt用过的) 然而,这个algorithm似乎在很多地方出现,所以我认为它必须是可行的。 所以我不知道如果我做错了或者如果algorithm是错误的。 我希望你们中的一些人能够解决同样的问题,可以给我一些提示,以解释可能导致这个问题的原因。 这是我使用的algorithm的翻译 int cols = hmInfo.terrainWidth; int rows = hmInfo.terrainHeight; #define height(x, y) hmInfo.heightMap[(y*cols) + x].y XMVECTOR normal; for(DWORD y = 0; y < rows; ++y) { for(DWORD x = 0; x < cols; ++x) { float sx = height( x < cols-1 ? x+1 : x, […]

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

XNA 4中的RenderState

我正在阅读本教程的透明度,可以用来解决我的问题在这里 。 代码是用XNA 3编写的,但是我用的是XNA 4。 以下代码在XNA 4中有什么替代? device.RenderState.AlphaTestEnable = true; device.RenderState.AlphaFunction = CompareFunction.GreaterEqual; device.RenderState.ReferenceAlpha = 200; device.RenderState.DepthBufferWriteEnable = false; 我搜查了很多,但没有发现任何有用的东西。

在不平坦的地形上扑灭效果

我试图在Unity3d中整合一个“地面粒子”效果(如火圈或类似的效果),但是因为我使用了不平坦的地形作为我的地形网格,所以效果会在它之上的地形部分之后被剔除。 为了更好地说明,我创建了一个图像作为附件: 无论“深度”如何,我都希望效果始终显示。 如何避免/解决这个不良影响?