Jeysi Z

Пользователи
  • Публикаций

    8
  • Зарегистрирован

  • Посещение

Информация о Jeysi Z

  • Звание
    Новичок
  1. Движение 3D объекта вдоль линии

    Здравствуйте. Для проекта понадобилось мышью перемещать TSphere по линии, нарисованной с помощью Drawline. Не подскажите, как можно реализовать такое движение строго вдоль линии. Хотя, был бы благодарен если бы помогли понять обычное движение 3d объектов. Заранее спасибо.
  2. Текст на context

    Здравствуйте, хотел поинтересоваться, как писать что-то в процедуре render на context?
  3. Неправильно работает case

    Я посмотрел, вроде всё правильно.
  4. Неправильно работает case

    Значение stage меняется нажатием на кнопки, одна уменьшает на 1, другая увеличивает, в процедуре нажатия я вызываю render. Вот код procedure TForm2.Button2Click(Sender: TObject); begin stage:=stage+1; if stage>1 then begin Button3.Visible:=true; Label1.Margins.Left:=0; end; if stage=laststage then begin Button2.Visible:=false; Label1.Margins.Right:=65; end; Dummy1Render(sender,Dummy1.Context); Label1.Text:=IntToStr(stage); end; procedure TForm2.Button3Click(Sender: TObject); begin stage:=stage-1; if stage=1 then begin Button3.Visible:=false; Label1.Margins.Left:=65; end; if stage<laststage then begin Button2.Visible:=true; Label1.Margins.Right:=0; end; Dummy1Render(sender,Dummy1.Context); Label1.Text:=IntToStr(stage); end;
  5. Неправильно работает case

    Здравствуйте, для проекта понадобилось рисовать разные 3d линии в зависимости от значения переменной, сначала решил проверить на совсем простом примере, но сразу возникли проблемы. В общем, в процедуре render организован case для переменной stage, в зависимости от её значения должны рисоваться разные линии, но этого не происходит, рисуется только первоначальная линия. Вот код процедуры : procedure TForm2.Dummy1Render(Sender: TObject; Context: TContext3D); var i:integer; begin case stage of 1:begin if Context.BeginScene then try Context.Clear(TAlphaColorRec.White); Context.DrawLine(TPoint3D.Create(3,3,0),TPoint3D.Create(3,-3,0),1,TAlphaColorRec.Black); finally Context.EndScene; end; end; 2:begin if Context.BeginScene then try Context.Clear(TAlphaColorRec.White); Context.DrawLine(TPoint3D.Create(-3,3,0),TPoint3D.Create(-3,-3,0),1,TAlphaColorRec.Black); finally Context.EndScene; end; end; end; end; Вот скрины работы программы. Снизу отображается значение переменной stage. Заранее спасибо.
  6. Здравствуйте, начал делать проект о сечениях, нарисовал на viewport3D куб, поставил на грани несколько сфер и соединил их линиями (это была часть задумки). Потом решил добавить всему этому вращение, но когда начинаю вращать всё, что рисовалось в рендере пропадает, причём при отдалении камеры всё нормально. Не подскажете, как можно это исправить? Вот код рендера: procedure TForm2.Dummy1Render(Sender: TObject; Context: TContext3D); begin if Context.BeginScene then try Context.DrawLine(TPoint3D.Create(-3,3,-3),TPoint3D.Create(3,3,-3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(3,-3,-3),TPoint3D.Create(3,3,-3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(3,-3,-3),TPoint3D.Create(-3,-3,-3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(-3,3,-3),TPoint3D.Create(-3,-3,-3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(-3,3,3),TPoint3D.Create(3,3,3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(3,-3,3),TPoint3D.Create(3,3,3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(3,-3,3),TPoint3D.Create(-3,-3,3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(-3,3,3),TPoint3D.Create(-3,-3,3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(-3,3,-3),TPoint3D.Create(-3,3,3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(3,-3,-3),TPoint3D.Create(3,-3,3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(-3,-3,3),TPoint3D.Create(-3,-3,-3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(3,3,3),TPoint3D.Create(3,3,-3),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(Sphere1.Position.X,Sphere1.Position.Y,Sphere1.Position.Z), TPoint3D.Create(Sphere2.Position.X,Sphere2.Position.Y,Sphere2.Position.Z),1,TAlphaColorRec.Black); Context.DrawLine(TPoint3D.Create(Sphere3.Position.X,Sphere3.Position.Y,Sphere3.Position.Z), TPoint3D.Create(Sphere2.Position.X,Sphere2.Position.Y,Sphere2.Position.Z),1,TAlphaColorRec.Black); finally Context.EndScene; end; end; Вот код вращения procedure TForm2.Viewport3D1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); begin if ssleft in shift then begin Dummy2.RotationAngle.X:=Dummy2.RotationAngle.X-((Y-rot.Y)*0.3); Dummy2.RotationAngle.Y:=Dummy2.RotationAngle.Y-((X-rot.X)*0.3); Rot:=PointF(X,Y); end; end; Процедура масштабирования procedure TForm2.Viewport3D1MouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean); begin CameraZ.Position.Z:=CameraZ.Position.Z+WheelDelta/40; end; На изображениях показано как работает программа И ещё один вопрос если позволите. Обнаружил, что если ставить отображение камеры и объектов на viewport3d как screen, то не получается сменить стандартную камеру. Можно ли это исправить? Заранее спасибо.
  7. Огромное спасибо, всё понял, теперь в центр Viewport3D ставлю Dummy и на нём делаю рендер.
  8. Здравствуйте, для проекта понадобилось рисовать линии в 3d графике, но возникла такая проблема, можете подсказать, что не так? Вот часть кода procedure TForm2.Sphere1Render(Sender: TObject; Context: TContext3D); var v1,v2:TPoint3D; begin if Context.BeginScene then try v1:=TPoint3D.Create(Sphere1.Position.X,Sphere1.Position.Y,Sphere1.Position.Z); v2:=TPoint3D.Create(Sphere2.Position.X,Sphere2.Position.Y,Sphere2.Position.Z); Context.drawline(v1,v2,1,TAlphaColorRec.Black); finally Context.EndScene; end; end; На изображении результат работы программы.