65.9K
CodeProject 正在变化。 阅读更多。
Home

Miner3D_viewer ActiveX 控件(用于 Miner3D 游戏)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (6投票s)

2004年2月26日

CPOL

3分钟阅读

viewsIcon

73896

downloadIcon

4547

使用 VC 结合 VB 编写 3D 游戏解决方案。

Sample Image

引言

上个月,我写了一篇关于 OpenGL 选择的文章(可以在本节找到)。现在您可以看到我的全部代码了!

使用代码

首先,您需要了解 MFC ActiveX 控件向导的使用方法。您可以在 这里 找到教程。

Miner3D_viewer 控件

方法

  • AddChar: 绘制一个数字
  • AddColorTile: 绘制一个带指定颜色的立方体
  • AddColorWireTile: 绘制一个带指定颜色的线框立方体
  • AddFace: 绘制一个矩形
  • AddPoint: 绘制一个光点
  • AddTile: 绘制一个默认颜色(蓝色)的立方体
  • AddWireTile: 绘制一个默认颜色的线框立方体
  • ChangeTileColor: 更改立方体的颜色
  • Clear All: 清除屏幕上的所有内容
  • GetCamDirX: 返回相机方向的 X 维度
  • GetCamDirY: 返回相机方向的 Y 维度
  • GetCamDirZ: 返回相机方向的 Z 维度
  • GetHandleActiveWindow: 返回当前活动窗口的句柄
  • GetTilePos: 获取立方体的位置
  • OpenTile: 打开一个立方体
  • Pick: 确定屏幕上某个点对应的立方体
  • PlayMidiFile: 播放 MIDI 文件
  • Refresh: 重新绘制
  • StopPlayMidi: 关闭声音

属性

  • BackColor: 背景颜色
  • CamAxz: 沿 XZ 平面的角度
  • CamAzy: 沿 ZY 平面的角度
  • CamPosX: 相机的 X 维度
  • CamPosY: 相机的 Y 维度
  • CamPosZ: 相机的 Z 维度
  • CharRotateDegree: 数字的旋转角度
  • FogColor: 雾的颜色
  • FogDensity: 雾的密度
  • Interval: 类似于计时器,但增加了屏幕刷新
  • Light1: 光线从上到下
  • PickLessExact: 选择时精度较低
  • SeeAngle: 可视角度
  • SeeFarthest: 看最远
  • SeeNearest: 看最近

事件

  • EndPlayMidi: 结束后播放 MIDI 文件
  • LeftButtonDown: 点击鼠标左键时(x, y 遵循屏幕像素)
  • RightButtonDown: 点击鼠标右键时(x, y 遵循屏幕像素)
  • Timer: 类似于计时器
  • VcKeyDown: 类似于按键按下,但会捕获箭头键
  • VcKeyUp: 类似于按键抬起,但会捕获箭头键

要运行此程序,您需要通过两种方式注册此 OCX

    • 在“运行...”中输入:regsvr32。
    • 打开文件资源管理器,并将此 OCX 拖到“运行”对话框中。

      (类似这样:regsvr32 d:\Miner3D_viewer.ocx

    • “回车”。
  1. 编译 VC 代码!

之后,您可以运行游戏或查看 VB 源代码!

现在我来解释我代码中的一些部分

  • CMiner3D_viewerCtrl 是您需要编写的内容!
  • 我制作了一个列表来保存绘制数字的方式MakeCharList()。您可以将我的数字视为一个对象,并用这种方式制作它。
    glNewList(1,GL_COMPILE); // call this by : glCallList(1);
        ... // code painting here
    glEndList();
  • 对于选择,我使用函数CMiner3D_viewerCtrl::pick(double x,double y, BOOL FAR* miss)

    我不知道为什么 Z 维度不起作用,所以我不得不计算每个距离的平方来确定哪个对象最近,有时还会抛出“除零”异常!如果您知道原因,请告诉我!谢谢!

  • 将 RGB 颜色转换为 OpenGL 颜色:您可以将 RGB COLORREF 了解为:color = 0x00112233
    • 11:蓝色分量。您可以通过 (color & 0xff0000) 获取。
    • 22:绿色分量。您可以通过 (color & 0xff00) 获取。
    • 33:红色分量。您可以通过 (color & 0xff) 获取。

    之后,除以 255 即可获得 OpenGL 颜色!

  • 如果我有时间,我会解释更多,或者您可以发送邮件至 chithien@hotpop.com

关注点

  • 我尝试编写了一个 3D 游戏,并找到了结合 VC 和 VB 的方法。我成功了!
  • 我曾使用过纹理和混合函数,但我的电脑对此太慢了,所以我已经将其移除了!
© . All rights reserved.