Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Подскажите как перемещать объекты в DirectX / 10 сообщений из 10, страница 1 из 1
01.01.2010, 11:17:33
    #36395431
Arik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как перемещать объекты в DirectX
Добрый день.

Занялся изучением DX и столкнулся с нехваткой литературы. Приходится постоянно со словарем сидеть. Если кто делал нечто подобное будьте добры помогите плиз. Или хотябы подскажите как определить нажатие кнопки мыши на объекте и как менять координаты объекта при перетаскивании мышкой.

Задача: перемещение треугольника при помощи мыши.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Imports Microsoft.DirectX.DirectInput

Public Class frmSample

    Private myDevice As Device = Nothing
    Private vertexBuffer As VertexBuffer = Nothing

    Private Sub frmSample_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        Render()
    End Sub

    Public Function InitializeGraphics() As Boolean
        Try
            Dim presentParams As New PresentParameters
            presentParams.Windowed = True
            presentParams.SwapEffect = SwapEffect.Discard
            'Создание device с параметрами, задаваемыми presentParams.
            myDevice = New Device( 0 , DeviceType.Reference, Me, CreateFlags.SoftwareVertexProcessing, presentParams)
            AddHandler myDevice.DeviceReset, AddressOf Me.OnResetDevice
            Me.OnCreateDevice(myDevice, Nothing)
            Me.OnResetDevice(myDevice, Nothing)
            Return True
            'Если неудача, то возврящаем False.
        Catch e As DirectXException
            Return False
        End Try
    End Function

    Public Sub OnCreateVertexBuffer(ByVal sender As Object, ByVal e As EventArgs)
        Dim vb As VertexBuffer = CType(sender, VertexBuffer)
        Dim verts As CustomVertex.PositionColored() = CType(vb.Lock( 0 ,  0 ), CustomVertex.PositionColored())
        'Задаем координаты и цвета вершин.
        verts( 0 ) = New CustomVertex.PositionColored(- 1 , - 1 ,  0 , Color.Green.ToArgb())
        verts( 1 ) = New CustomVertex.PositionColored( 1 , - 1 ,  0 , Color.Green.ToArgb())
        verts( 2 ) = New CustomVertex.PositionColored( 0 , Math.Sqrt( 3 ) -  1 ,  0 . 5 , Color.Green.ToArgb())
        vb.Unlock()
    End Sub
    Public Sub OnCreateDevice(ByVal sender As Object, ByVal e As EventArgs)
        Dim dev As Device = CType(sender, Device)
        'Создаем вершинный буфер из 3 вершин.
        vertexBuffer = New VertexBuffer(GetType(CustomVertex.PositionColored),  3 , dev,  0 , CustomVertex.PositionColored.Format, Pool.Default)
        AddHandler vertexBuffer.Created, AddressOf Me.OnCreateVertexBuffer
        Me.OnCreateVertexBuffer(vertexBuffer, Nothing)
    End Sub
    Public Sub OnResetDevice(ByVal sender As Object, ByVal e As EventArgs)
        Dim dev As Device = CType(sender, Device)
        ' Показываем два стороны треугольника.
        dev.RenderState.CullMode = Cull.None
        ' Отключаем световые эффекты.
        dev.RenderState.Lighting = False
    End Sub

    Public Sub Render()
        If myDevice Is Nothing Then
            Return
        End If
        'Устанавливаем цвет фона.
        myDevice.Clear(ClearFlags.Target, System.Drawing.Color.Bisque,  1 .0F,  0 )
        'Начинаем сцену.
        myDevice.BeginScene()
        ' Применяем матрицы преобразований
        SetupMatrices()
        'Тут будем добавлять код.
        myDevice.SetStreamSource( 0 , vertexBuffer,  0 )
        myDevice.VertexFormat = CustomVertex.PositionColored.Format
        DrawTrangle(- 2 ,  0 ,  0 )
        DrawTrangle( 2 ,  0 ,  0 )

        'Заканчиваем сцену.
        myDevice.EndScene()
        myDevice.Present()
    End Sub

    ' Установка матрицы преобразования.
    Private Sub SetupMatrices()
        ' Установка мировой матрицы.
        myDevice.Transform.World = Matrix.Translation( 0 ,  0 ,  1 )
        ' Установка матрицы вида.
        myDevice.Transform.View = Matrix.LookAtLH( _
                New Vector3( 0 .0F,  0 .0F, - 12 .0F), _
                New Vector3( 0 .0F,  0 .0F,  0 .0F), _
                New Vector3( 0 .0F,  1 .0F,  0 .0F))
        ' Установка матрицы проекции.
        myDevice.Transform.Projection = Matrix.PerspectiveFovLH(CSng(Math.PI) /  4 ,  1 .0F,  1 .0F,  100 .0F)
    End Sub
    Private Sub DrawTrangle(ByVal x As Integer, ByVal y As Integer, ByVal z As Integer)
        myDevice.Transform.World = Matrix.Translation(x, y, z)
        myDevice.DrawPrimitives(PrimitiveType.TriangleList,  0 ,  1 )
    End Sub
End Class
...
Рейтинг: 0 / 0
01.01.2010, 14:34:16
    #36395469
Альмалексия
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как перемещать объекты в DirectX
Arik,
Чтобы переместить объект необходимо менять модельно-видовую матрицу. Чтобы это делать риалтайм, то надо рендерить в цикле.
Это принцип 3D, как именно в DirectX это реализовать не знаю.
...
Рейтинг: 0 / 0
01.01.2010, 14:35:58
    #36395470
С0ВЕСТЬ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как перемещать объекты в DirectX
ArikДобрый день.
Занялся изучением DX и столкнулся с нехваткой литературы .

Может плохо искали?
...
Рейтинг: 0 / 0
01.01.2010, 14:48:24
    #36395476
Arik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как перемещать объекты в DirectX
С0ВЕСТЬ Может плохо искали?
Сформулирую более правильно.
Литературы много, но в основном все на C++, который я вообще не знаю. Пишу на VB, могу читать код на C#.
АльмалексияArik,
Чтобы переместить объект необходимо менять модельно-видовую матрицу. Чтобы это делать риалтайм, то надо рендерить в цикле.
Это принцип 3D, как именно в DirectX это реализовать не знаю.
Все верно нужно рендерить, и с перемещением треугольника впринципе сложностей нет, но вот как определить, что мышкой мы попали в тот самый треугольник, вот в чем сложность, никак не могу найти как осуществить проверку.

Спасибо за ответы :)
...
Рейтинг: 0 / 0
01.01.2010, 15:07:34
    #36395484
С0ВЕСТЬ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как перемещать объекты в DirectX
ArikС0ВЕСТЬ Может плохо искали?
Сформулирую более правильно.
Литературы много, но в основном все на C++, который я вообще не знаю. Пишу на VB, могу читать код на C#.
Спасибо за ответы :)

Вообще-то в DirectX SDK есть не только необходимая документация, также есть и примеры.
...
Рейтинг: 0 / 0
01.01.2010, 16:16:47
    #36395495
Arik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как перемещать объекты в DirectX
С0ВЕСТЬВообще-то в DirectX SDK есть не только необходимая документация, также есть и примеры.
... и опять же все на С++
...
Рейтинг: 0 / 0
01.01.2010, 22:09:28
    #36395580
Фанат OpenGL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как перемещать объекты в DirectX
ArikВсе верно нужно рендерить, и с перемещением треугольника впринципе сложностей нет, но вот как определить, что мышкой мы попали в тот самый треугольник, вот в чем сложность, никак не могу найти как осуществить проверку.

Определение попадания луча в треугольник такая непосильная задача? Аналитической геометрии на первом курсе и то должно хватить для решения.
Или ожидается готовая функция самого Direct3D?
...
Рейтинг: 0 / 0
01.01.2010, 23:12:31
    #36395589
Arik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как перемещать объекты в DirectX
Фанат OpenGLОпределение попадания луча в треугольник такая непосильная задача? Аналитической геометрии на первом курсе и то должно хватить для решения.
Или ожидается готовая функция самого Direct3D?
В том то и дело, что не не имею ни малейшего представления с какой стороны подойти. Готовая функция было бы хорошо, если ее нет, буду рад описанию того как проверить попадание луча в заданную фигуру. В данном примере камера направленна вдоль оси Z. Вопрос: с какой точки луч строить? от камеры? или перпендикулярно плоскости?
...
Рейтинг: 0 / 0
31.03.2010, 04:20:47
    #36551850
Janry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как перемещать объекты в DirectX
Таже проблема... Arik ты с ней справился?

как и куда строить луч я знаю, а вот как проверить что он пересек, что то... или не пересек... , где хранить или как данные о треугольниках??
...
Рейтинг: 0 / 0
31.03.2010, 09:57:35
    #36552027
Brian J. Hakim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как перемещать объекты в DirectX
По C# DX есть ровно ОДНА книга хорошая да и ту я забыл (Managed Direct X и на обложке двиган от байка)

Но суть не в том, а в том что это мертворожденное дитя - если хочешь директ икс именно, тогда с++, если шарпы но чтобы кастомно рисовать, WPF (сдвижок его сделан как раз на Managed DX)
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Подскажите как перемещать объекты в DirectX / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]