Próbuję narysować okrąg bardzo podobny do wzorów orbitalnych na stronie internetowej this. Chciałbym użyć Three.js zamiast czystej WebGL.Narysuj okrąg (bez cieniowania) za pomocą Three.js
Odpowiedz
Three.js r50 dodano CircleGeometry
. Można go zobaczyć (aczkolwiek z twarzą) w WebGL Geometries example.
Pierwszy wierzchołek w geometrii jest tworzony w środku okręgu (w r84, patrz CircleGeometry.js line 71, w r65, patrz CircleGeometry.js line 18), co jest fajne, jeśli wybierasz się na "pełnego Pac-Mana" lub "bez informacji" wykres kołowy ". Aha, i wydaje się konieczne, jeśli zamierzasz użyć dowolnego materiału poza LineBasicMaterial
/LineDashedMaterial
.
I zostały zweryfikowane, że następujący kod działa w obu R60 & R65:
var radius = 100,
segments = 64,
material = new THREE.LineBasicMaterial({ color: 0x0000ff }),
geometry = new THREE.CircleGeometry(radius, segments);
// Remove center vertex
geometry.vertices.shift();
scene.add(new THREE.Line(geometry, material));
PS: "Docs" to teraz piękny CircleGeometry
interaktywny przykład: https://threejs.org/docs/#api/geometries/CircleGeometry
Zobacz próbkę three.js http://mrdoob.github.com/three.js/examples/webgl_lines_colors.html, aby zobaczyć, jak rysować kolorowe linie.
Krąg, taki jak cytowane, jest narysowany jako duży # małych prostych segmentów. (W rzeczywistości te, które pokazujesz, mogą być elipsami)
Użyłem kodu, który piszą Mr.doob w this github post.
var resolution = 100;
var amplitude = 100;
var size = 360/resolution;
var geometry = new THREE.Geometry();
var material = new THREE.LineBasicMaterial({ color: 0xFFFFFF, opacity: 1.0});
for(var i = 0; i <= resolution; i++) {
var segment = (i * size) * Math.PI/180;
geometry.vertices.push(new THREE.Vertex(new THREE.Vector3(Math.cos(segment) * amplitude, 0, Math.sin(segment) * amplitude)));
}
var line = new THREE.Line(geometry, material);
scene.add(line);
to nie działa, kiedy weź var mesh = new THREE.Mesh (geometria, materiał); jakikolwiek pomysł ..? – GvSharma
Interfejs API zmienił się nieznacznie w nowszych wersjach programu threejs.
var segmentCount = 32,
radius = 100,
geometry = new THREE.Geometry(),
material = new THREE.LineBasicMaterial({ color: 0xFFFFFF });
for (var i = 0; i <= segmentCount; i++) {
var theta = (i/segmentCount) * Math.PI * 2;
geometry.vertices.push(
new THREE.Vector3(
Math.cos(theta) * radius,
Math.sin(theta) * radius,
0));
}
scene.add(new THREE.Line(geometry, material));
Modyfikuj segmentCount
aby koło gładsza i bardziej postrzępione jak potrzebne sceny. 32 segmenty będą dość gładkie dla małych kółek. Na orbitach takich jak na stronie, którą łączysz, możesz mieć kilkaset.
Zmodyfikuj kolejność trzech komponentów w konstruktorze Vector3
, aby wybrać orientację okręgu. Jak tutaj podano, okrąg zostanie wyrównany do płaszczyzny x/y.
to nie działa, gdy biorę TRZY.Mesh ... jakiś pomysł? – GvSharma
Ten przykład jest w Three.js dokumentacja:
var material = new THREE.MeshBasicMaterial({
color: 0x0000ff
});
var radius = 5;
var segments = 32; //<-- Increase or decrease for more resolution I guess
var circleGeometry = new THREE.CircleGeometry(radius, segments);
var circle = new THREE.Mesh(circleGeometry, material);
scene.add(circle);
var getStuffDashCircle2 = function() {
var segment = 100, radius = 100;
var lineGeometry = new THREE.Geometry();
var vertArray = lineGeometry.vertices;
var angle = 2 * Math.PI/segment;
for (var i = 0; i < segment; i++) {
var x = radius * Math.cos(angle * i);
var y = radius * Math.sin(angle * i);
vertArray.push(new THREE.Vector3(x, y, 0));
}
lineGeometry.computeLineDistances();
var lineMaterial = new THREE.LineDashedMaterial({ color: 0x00cc00, dashSize: 4, gapSize: 2 });
var circle = new THREE.Line(lineGeometry, lineMaterial);
circle.rotation.x = Math.PI/2;
circle.position.y = cylinderParam.trackHeight+20;
return circle;
}
- 1. Narysuj okrąg o ggplot2
- 2. Narysuj okrąg w Tkinter (Python)
- 3. Python, narysuj okrąg z PIL
- 4. Narysuj okrąg na widoku (Android)
- 5. za pomocą three.js JSONLoader
- 6. Narysuj teren za pomocą pythona?
- 7. as3: narysuj okrąg z otworem w nim używając actionscript
- 8. Narysuj okrąg z promieniem i punktami wokół krawędzi
- 9. Narysuj docelowy obraz za pomocą kakao Touch
- 10. Narysuj otwór w prostokącie za pomocą SpriteKit?
- 11. Narysuj tekst sformatowany za pomocą QPaintera
- 12. Qt zakreślony tekst bez cieniowania czcionka
- 13. Nie mogę usuwać obiektów za pomocą Three.JS
- 14. Obróć kamerę wokół obiektu za pomocą Three.js
- 15. Jak zmienić szerokość CubeGeometry za pomocą Three.js?
- 16. THREE.js SphereGeometry Panorama hotspot za pomocą DOMElements
- 17. Najlepszy sposób rysowania wykresów za pomocą Three.js
- 18. WPF: czy można renderować okrąg za pomocą GeometryDrawing?
- 19. Obiekt obrysu (skala normalna + maska szablonu) three.js
- 20. Narysuj część okręgu
- 21. Narysuj OpenGL na pulpicie Windows bez okna
- 22. artefakty przy renderowaniu obu stron przezroczystego obiektu za pomocą three.js
- 23. Jak obrócić niektóre księżyce wokół planety za pomocą THREE.js?
- 24. Jak animować między dwoma kolorami za pomocą pliku three.js?
- 25. Weryfikacja użycia wielu tekstur za pomocą kostek three.js
- 26. Dodawanie gradientu i cieniowania TextView
- 27. Narysuj wygasły kształt w SVG
- 28. Jak utworzyć okrąg z numerem?
- 29. Narysuj część obrazu na ekranie (bez wczytywania całości do pamięci)
- 30. Aktualizacja obrazu Three.js
Bardzo fajnie! Cieszę się, że to zostało dodane do biblioteki. – theblang
Używając tej metody z "TRYB.LINĄ", istniał odstęp między pierwszym i ostatnim wierzchołkiem. Aby uzyskać całkowicie zamknięty okrąg, użyj zamiast niego 'TRÓJ.LINKLoop'. https://threejs.org/docs/#api/objects/LineLoop – jackrugile