设为首页收藏本站

八达网

 找回密码
 注册
查看: 1033|回复: 29
打印 上一主题 下一主题

看了2小时D3D编程终于全部搞懂了下一步我将重写星际2

[复制链接]

1999

主题

0

好友

1万

积分

航母

跳转到指定楼层
1
发表于 2012-11-30 22:35 |只看该作者 |倒序浏览
没想到3D编程那么简单
3

查看全部评分

351

主题

4

好友

6万

积分

仲裁者

2
发表于 2012-11-30 22:38 |只看该作者
要把屌激素引入兵种相克吗
回复

使用道具 举报

206

主题

0

好友

3039

积分

飞龙

3
发表于 2012-11-30 22:38 |只看该作者
  8折,买9颗好评送一颗
回复

使用道具 举报

黄宏章 该用户已被删除
4
发表于 2012-11-30 22:39 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

415

主题

4

好友

2万

积分

大和

MT

战队
[B.D]=
种族
Protoss
5
发表于 2012-11-30 22:47 |只看该作者
爱郭不等于爱裆,正腐不等于郭嘉,某一个裆更不代表郭嘉


占占占人     占占点    占点占   点占占   ....占占占
回复

使用道具 举报

304

主题

1

好友

4万

积分

光明执政官

双子R族

2013年夜饭

6
发表于 2012-11-30 22:54 |只看该作者
带淡臭气味的程序确实是一种创新阿!
回复

使用道具 举报

42

主题

1

好友

3454

积分

仲裁[复制]

7
发表于 2012-12-1 09:08 |只看该作者
这标题太威武了
吹草稿不打牛皮了都

吃地沟油的命,操中南海的心。
生日本人的气,砸中国人的车。
回复

使用道具 举报

1999

主题

0

好友

1万

积分

航母

8
发表于 2012-12-1 11:47 |只看该作者
D3D比 DX DRAW 还简单,DX DRAW还要设置一大堆参数,还要建几个表面,动画的时候还要后台表面翻转到前台,使得不闪烁,D3D设置就少了很多连翻转都不用,比较符合人脑思维
回复

使用道具 举报

1999

主题

0

好友

1万

积分

航母

9
发表于 2012-12-1 11:49 |只看该作者
D3D实际上就是在3维空间生成三角形,任何建模都是三角形拼接成的,然后设置视角,设置环境光源就OK了。
回复

使用道具 举报

0

主题

4

好友

10万

积分

黑暗执政官

=,=

10
发表于 2012-12-1 11:58 |只看该作者
非灌水機,純正手動輸入,管理員明鑒.
回复

使用道具 举报

42

主题

0

好友

1万

积分

航母

11
发表于 2012-12-1 11:58 |只看该作者
请问看的哪本书。
回复

使用道具 举报

1442

主题

8

好友

7万

积分

仲裁者

luaTeRran

2012年度八达十大水友

12
发表于 2012-12-1 12:01 |只看该作者
[T.H]Ukyo 发表于 2012-12-1 11:58
请问看的哪本书。

<<程序猿的自我修养>>


回复

使用道具 举报

42

主题

0

好友

1万

积分

航母

13
发表于 2012-12-1 12:04 |只看该作者
KoMoS 发表于 2012-12-1 12:01

熊大的吹牛逼流程吧
回复

使用道具 举报

1999

主题

0

好友

1万

积分

航母

14
发表于 2012-12-1 12:22 |只看该作者
D3D真的很弱智,看起来很高深,弄懂了就觉得不过如此,就是设置顶点,设置世界环境,设置视角,就设3个东西是最基本的,剩下的纹理,光源,重力系统都是一个函数的问题。还有一个调入建模也是一个函数搞定,真不知道你们在怂些什么?被大堆术语吓萌了?还是据说要什么矩阵,线性代数基础,吓得不敢去学?
回复

使用道具 举报

1999

主题

0

好友

1万

积分

航母

15
发表于 2012-12-1 12:27 |只看该作者
捕获.PNG
我的第一个D3D程序绘制一个运动的3D 三角形
回复

使用道具 举报

1999

主题

0

好友

1万

积分

航母

16
发表于 2012-12-1 12:28 |只看该作者
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.DirectX;          //开发directx需要包含的两个命名空间
using Microsoft.DirectX.Direct3D;

namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
      
        private Device device = null;

      
        VertexBuffer vertexBuffer = null;

      
        PresentParameters presentParameters = new PresentParameters();

        
        bool pause = false;
      
     
        Random rn = new Random();
        public Form1()
        {
            InitializeComponent();
            InitializeGraphics();

        }
        public bool InitializeGraphics()
        {
            try
            {
                //设置屏幕显示模式为窗口模式
                presentParameters.Windowed = true;
               // presentParameters.FullScreenRefreshRateInHz = 60;
                //设置如何从后台缓冲区复制到前台缓冲区(SwapEffect.Discard表示缓冲区在显示后立即被舍弃,这样可以节省开销)
                presentParameters.SwapEffect = SwapEffect.Discard;
                //创建一个设备
                device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParameters);
                //为设备释放订阅倳件处理
               // device.DeviceReset += new System.EventHandler(this.OnResetDevice);

                this.OnCreateDevice(device, null);
                this.OnResetDevice(device, null);
                pause = false;
                return true;
            }

            catch (DirectXException)
            {
                return false;
            }
        }
        public void OnCreateDevice(object sender, EventArgs e)
        {
            Device dev = (Device)sender;

            //创建顶点缓冲,有个顶点
            vertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionColored), 18, dev, 0, CustomVertex.PositionColored.Format, Pool.Default);
            //为创建顶点缓存订阅倳件处理
      //      vertexBuffer.Created += new System.EventHandler(this.OnCreateVertexBuffer);

            this.OnCreateVertexBuffer(vertexBuffer, null);
        }
        public void OnResetDevice(object sender, EventArgs e)
        {
            Device dev = (Device)sender;
            //关闭剔除模式,使我们能看见此四棱锥的前面和后面
            dev.RenderState.CullMode = Cull.None;
            // 关闭场景里的灯光,显示顶点自己的颜色
            dev.RenderState.Lighting = false;
        }
        public void OnCreateVertexBuffer(object sender, EventArgs e)
        {

            VertexBuffer vb = (VertexBuffer)sender;
            CustomVertex.PositionColored[] verts = (CustomVertex.PositionColored[])vb.Lock(0, 0);

            //四棱锥原始的个点
            Vector3 vertex1 = new Vector3(25, 0, 100);
            Vector3 vertex2 = new Vector3(0, 0, -25);
         //   Vector3 vertex3 = new Vector3(-25, 0, 0);
        //    Vector3 vertex4 = new Vector3(0, 0, 25);
            Vector3 vertex5 = new Vector3(0, 25, 0);

            //四棱锥中包含个三角形,所以要构造个点来绘制
            verts[0].Position = vertex1;
            verts[1].Position = vertex2;
            verts[2].Position = vertex5;
           /* verts[3].Position = vertex2;
            verts[4].Position = vertex3;
            verts[5].Position = vertex5;
            verts[6].Position = vertex3;
            verts[7].Position = vertex4;
            verts[8].Position = vertex5;
            verts[9].Position = vertex4;
            verts[10].Position = vertex1;
            verts[11].Position = vertex5;
            verts[12].Position = vertex2;
            verts[13].Position = vertex1;
            verts[14].Position = vertex3;
            verts[15].Position = vertex3;
            verts[16].Position = vertex1;
            verts[17].Position = vertex4;*/


            //给每个点赋予随机颜色
            for (int i = 0; i < 3; i++)
            {
                verts[i].Color = Color.FromArgb(SetColor(), SetColor(), SetColor()).ToArgb();

            }
            vb.Unlock();



        }
        public int SetColor()
        {
            int number = rn.Next(256);
            return number;
        }
        private void SetupCamera()
        {
            //设置世界矩阵,根据系统运行时间而变化
           // device.Transform.World = Matrix.RotationAxis(new Vector3((float)Math.Cos(Environment.TickCount / 250.0f), 1, (float)Math.Sin(Environment.TickCount / 250.0f)), Environment.TickCount / 3000.0f);
            //设置摄像机的位置,它在z轴上-50处,看着原点,y轴为正方向
            device.Transform.View = Matrix.LookAtLH(new Vector3(0.0f, 0.0f, -50f), new Vector3(0.0f, 0.0f, 0.0f), new Vector3(0.0f, 1.0f, 0.0f));

            //设置摄像机的视界,角度为度,看的最近为,看的最远处为.不再这个视界中的影像都不会被显示
            device.Transform.Projection = Matrix.PerspectiveFovLH(((float)(float)Math.PI / 2), 1.0f, 10.0f, 200.0f);
        }

        public void Render()
        {
            if (device == null)
                return;

            if (pause)
                return;

            //背景设为绿色
            device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);
            //开始场景
            device.BeginScene();
            // 设置世界,视野和投影矩阵
            SetupCamera();

            // 给设备指定顶点缓存
            device.SetStreamSource(0, vertexBuffer, 0);

            //设置设备的顶点格式
            device.VertexFormat = CustomVertex.PositionColored.Format;

            //绘制图形,使用的方法为三角形列表,个数为个
            device.DrawPrimitives(PrimitiveType.TriangleList, 0, 6);

            //结束场景
            device.EndScene();

            //更新场景
            device.Present();
        }

        private void timer2_Tick(object sender, EventArgs e)
        {
            Render();
            
        }

    }
}
回复

使用道具 举报

173

主题

0

好友

1万

积分

航母

17
发表于 2012-12-1 12:29 |只看该作者
伊万大师威武
回复

使用道具 举报

1

主题

0

好友

2万

积分

大和

18
发表于 2012-12-1 12:36 |只看该作者
碉堡了
回复

使用道具 举报

5

主题

0

好友

265

积分

机枪兵

19
发表于 2012-12-1 12:38 |只看该作者
回复

使用道具 举报

146

主题

1

好友

1万

积分

航母

我有一个梦想,那就是永远活在新闻联播里。。。

20
发表于 2012-12-1 12:40 |只看该作者
........
回复

使用道具 举报

98

主题

7

好友

10万

积分

黑暗执政官

神仙?妖怪?谢谢。

21
发表于 2012-12-1 12:48 |只看该作者
<<程序猿的自我修养>>
回复

使用道具 举报

1818

主题

1

好友

5439

积分

飞龙

22
发表于 2012-12-1 13:55 |只看该作者
真是碉堡了。。。。。。。
回复

使用道具 举报

198

主题

3

好友

3万

积分

大和

23
发表于 2012-12-1 16:12 来自手机 |只看该作者
星际二写好再发帖好吗
回复

使用道具 举报

1

主题

0

好友

2万

积分

大和

24
发表于 2012-12-1 16:50 |只看该作者
&#128023;&#128023;&#128023;
回复

使用道具 举报

100

主题

2

好友

39万

积分

黑暗执政官

25
发表于 2012-12-1 16:59 |只看该作者
没有屁眼打回重写
回复

使用道具 举报

bdgfaa11 该用户已被删除
26
发表于 2012-12-1 17:02 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

94

主题

0

好友

1342

积分

龙骑士

27
发表于 2012-12-1 17:25 |只看该作者
买9颗好评送一颗
没个性,不签名.
回复

使用道具 举报

154

主题

1

好友

5956

积分

飞龙

28
发表于 2012-12-1 22:17 |只看该作者
官方认证真心大熊蜜
回复

使用道具 举报

683

主题

2

好友

3万

积分

大和

2008年度八达十大水友

29
发表于 2012-12-1 22:23 来自手机 |只看该作者
打脸了。。。。
回复

使用道具 举报

23

主题

0

好友

1万

积分

航母

30
发表于 2012-12-1 22:45 |只看该作者
楼主你能达到我两年前的水平吗?
http://www.cppblog.com/lf426/

3D编程方面我在OpenGL方面研究了一下,不过没有发教程而已。
不过,你真的觉得线性代数很简单?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|八达网    

GMT+8, 2025-11-28 13:57

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部