powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Подскажите как перемещать объекты в DirectX
10 сообщений из 10, страница 1 из 1
Подскажите как перемещать объекты в DirectX
    #36395431
Arik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Занялся изучением 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
Подскажите как перемещать объекты в DirectX
    #36395469
Альмалексия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arik,
Чтобы переместить объект необходимо менять модельно-видовую матрицу. Чтобы это делать риалтайм, то надо рендерить в цикле.
Это принцип 3D, как именно в DirectX это реализовать не знаю.
...
Рейтинг: 0 / 0
Подскажите как перемещать объекты в DirectX
    #36395470
Фотография С0ВЕСТЬ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArikДобрый день.
Занялся изучением DX и столкнулся с нехваткой литературы .

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

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

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

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

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

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


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