【问题标题】:Simple 3D Editor/Viewer简单的 3D 编辑器/查看器
【发布时间】:2010-05-03 20:02:13
【问题描述】:

我正在寻找一个应用程序,它能够在空间中加载一堆点、渲染它们并能够进行简单的 3D 操作(选择这样的点、旋转和移动视口)。

源必须可用,因为我想将它用作我自己的应用程序的基础。

【问题讨论】:

    标签: c# graphics editor 3d


    【解决方案1】:

    有几个开源 3D 编辑器,但您会发现它们中的大多数都与特定的 3D 引擎相关联(即 irrEdit => Irrlicht)。

    有 Blender,但我怀疑它太复杂了,无法找到您想要的代码。

    在几分钟的谷歌搜索中,我无法找到包含源代码的 3D 编辑器的简单示例,但我找到了这个,它可能有用:

    Programming a 3D Editor

    【讨论】:

      【解决方案2】:

      http://Clara.io,源不可用,但它是免费的,您可以轻松编写插件以自定义格式导入/导出,还可以在场景中添加自己的对象。

      【讨论】:

        【解决方案3】:

        您可以使用directX 来解决这个问题。我使用 delphi 和 directX 完成了这项工作。 您也可以使用 c# 来实现它。

        它可以在空间中加载一堆点
        您可以根据需要读取文本文件或二进制文件并将其存储在缓冲区中。

        TD3DXVector3 temppt = D3DXVector3(X,Y,Z);
        

        这里,TD3DXVector3 是directX 的类型。

        渲染它们
        对于渲染,IDirect3DDevice9 有一个方法DrawPrimitive,你可以使用它来渲染点、线或三角形。

        g_pd3dDevice.DrawPrimitive(D3DPT_TRIANGLELIST,0,count);
        

        这里,Count 是您要绘制的三角形的数量。

        选择这样的点,旋转和移动视口
        对于旋转和移动视口,您可以使用变换矩阵进行投影变换、视图变换和世界变换。

        【讨论】:

          【解决方案4】:

          Allegro 库除了只有 2d 之外更易于使用,但可能有 DirectX 的 3d 接口。你需要了解 C++。下面是随机像素的初始化文件:

          您可以从 allegro.cc 获取库并使用 Visual Studio 进行编译。

          编辑: 这是一个 allegroGL 示例。它的 allegro 与 openGL 相结合。 http://www.allegro.cc/forums/thread/589211

          #include <conio.h>
          #include <stdlib.h>
          #include "allegro.h"
          int main()
          {
              int x,y,x1,y1,x2,y2;
              int red, green, blue, color;
          
              allegro_init();
          
              install_keyboard();
          
              srand(time(NULL));
          
              int ret = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640,480,0,0);
              if (ret != 0)
              {
                  allegro_message(allegro_error);
                  return 0;
              }
          
          //textprintf(screen, font, 0,0,15,"Pixels program - %dx%d - press esc to quit", SCREEN_W, SCREEN_H);
          
              while(!key[KEY_ESC])
              {
                  x = 10+rand()%(SCREEN_W - 20);
                  y = 10+rand()%(SCREEN_H - 20);
          
                  red = rand() % 255;
                  green = rand() % 255;
                  blue = rand() % 255;
                  color = makecol(red,green,blue);
                  putpixel(screen,x,y,color);
                }
                allegro_exit();
          }
          END_OF_MAIN();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-05-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多