Форум программистов, компьютерный форум, киберфорум
3D моделирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 6 / 0
Регистрация: 17.06.2024
Сообщений: 82

3D анимация кристаллической решетки

06.09.2024, 07:04. Показов 1916. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как создать 3D анимацию кристаллической решетки, которую можно вращать мышкой вокруг произвольной оси?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.09.2024, 07:04
Ответы с готовыми решениями:

Моделирование кристаллической решетки
Добрый день! По учебе возникла необходимость написать программу моделирования поведения кристаллической решетки. Может быть кто-нибудь...

Наращивание кристаллической решётки металла
Подскажите, можно ли как - то наращивать кристаллическую решётку стали на лету? Тоесть есть, к примеру, стальной кубик, я какую - нибуть...

Проблема моделирования кристаллической решётки
Я хочу смоделировать хаотическое поведение атомов в кристаллической решётке. Каждый атом в системе взаимодействует с каждым, и...

27
0 / 6 / 0
Регистрация: 17.06.2024
Сообщений: 82
11.09.2024, 15:38  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Вы пишите, что стрелки указывают направление вращения атомов, то есть сфера вращается вокруг своей оси. Следовательно, на сферах должен быть рисунок, чтобы видеть вращение, так как если сфера покрашена одним цветом, то вращения не будет видно. Можно, для начала, изобразить стрелки на сферах, а потом можно будет добавить ещё что-нибудь, чтобы лучше видеть вращение. Надо найти или создать изображение стрелки и нанести это изображение на сферу. Создать сферу и наложить на неё изображение можно в 3D-редакторе. Вот список топ-50 3D-редакторов, можете выбрать. Я использую бесплатный Blender. Если выберите Blender и у вас компьютер выше бюджетного, то можете ставить текущую версию: https://www.blender.org/download/ А если у вас бюджетный ноутбук, то подойдёт и старая версия Blender 2.67b На стационарный бюджетный компьютер можно поставить Blender 2.79.
Большое спасибо за консультацию. Английского я не знаю. Знаю только немецкий. У меня есть программа "Blender 2.80 Reference Manual" Недавно скачал из интернета. Опыт пока почти нулевой. Попробую изучить и эту программу.
То, что необходимо на шар прикрепить стрелку и заставить шар вращаться я понимаю. Потом разместить шары в углах например куба (для простой кубической кристаллической решетки) и для каждого шара сделать отдельную сцену?
Ну и в конце, нужно как то заставить вращаться (при помощи мышки) общую сцену в произвольном направлении, как например здесь?: https://www.ibiblio.org/e-notes/Cryst/NaCl.html
Последнее я совсем не понимаю, как можно в blender сделать. И можно ли вообще, в принципе.
0
7974 / 2924 / 489
Регистрация: 05.10.2013
Сообщений: 7,833
Записей в блоге: 209
11.09.2024, 16:01
Цитата Сообщение от axti Посмотреть сообщение
для каждого шара сделать отдельную сцену?
Надо создать только одну сферу, как показано на видео выше и сделать для неё UV-развёртку и экспортировать её в файл, в один из форматов: obj, dae, fbx или glTF. Далее, надо загрузить сферу и текстуру из файла. Сделать копии сферы в программе и расположить их в углах куба. Добавить вращение камеры мышкой. Сделать анимацию вращения сфер вокруг своих осей. Чтобы ничего не устанавливать предлагаю зарегистрироваться в онлайн-редакторе кода https://plnkr.co/ Вы можете использовать библиотеку Three.js для загрузки 3D-объектов и поворота камеры вокруг объекта. Я позже сделаю, что написал. Скину вам пример, как будет выглядеть вращение камеры вокруг объекта, пока это вращение камеры вокруг куба созданного в Three.js: https://plnkr.co/edit/GTrBHaOP55LG6Rkq?preview

index.html

PHP/HTML
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
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Orbit controls with import maps in Three.js and JavaScript</title>
    <link rel="stylesheet" type="text/css" href="./css/styles.css">
</head>
 
<body>
    <canvas id="renderCanvas"></canvas>
 
    <!-- Since importmap is not yet supported by all browsers, it is
        necessary to add the polyfill es-module-shims.min.js -->
    <script async src="https://8observer8.github.io/libs/[email protected]/es-module-shims.js"></script>
 
    <script type="importmap">
        {
            "imports": {
                "three": "https://8observer8.github.io/libs/[email protected]/build/three.module.min.js",
                "orbit-controls": "https://8observer8.github.io/libs/[email protected]/examples/jsm/controls/OrbitControls.js"
            }
        }
    </script>
 
    <script type="module" src="./js/index.js"></script>
 
</body>
 
</html>
index.js

JavaScript
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
import * as THREE from "three";
import { OrbitControls } from "orbit-controls";
 
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(
    50, window.innerWidth / window.innerHeight, 0.1, 500);
camera.position.y = 3;
camera.position.z = 5;
 
const canvas = document.getElementById("renderCanvas");
const renderer = new THREE.WebGLRenderer({ canvas: canvas, antialias: false });
renderer.setClearColor(new THREE.Color("rgb(50, 50, 50)"), 1);
renderer.setSize(window.innerWidth, window.innerHeight);
 
const orbitControls = new OrbitControls(camera, canvas);
orbitControls.target = new THREE.Vector3(0, 0, 0);
 
const boxGeometry = new THREE.BoxGeometry(1, 1, 1);
// const boxMaterial = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const boxMaterial = new THREE.MeshPhongMaterial({ color: 0x00ff00 });
const box = new THREE.Mesh(boxGeometry, boxMaterial);
scene.add(box);
 
const lightColor = new THREE.Color("rgb(255, 255, 255)");
const lightIntensity = 3;
const light = new THREE.DirectionalLight(lightColor, lightIntensity);
light.position.set(3, 5, 4);
scene.add(light);
 
function resize() {
    camera.aspect = window.innerWidth / window.innerHeight;
    camera.updateProjectionMatrix();
    renderer.setSize(window.innerWidth, window.innerHeight);
}
window.onresize = resize;
 
const clock = new THREE.Clock();
clock.start();
 
function render() {
    // box.rotation.y += 1 * clock.getDelta();
    orbitControls.update();
    renderer.render(scene, camera);
    requestAnimationFrame(render);
}
render();
css

CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
html,
body {
    overflow: hidden;
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
}
 
#renderCanvas {
    width: 100%;
    height: 100%;
}
1
7974 / 2924 / 489
Регистрация: 05.10.2013
Сообщений: 7,833
Записей в блоге: 209
11.09.2024, 21:32
Я сделал сферу и наложил на неё текстуру по видео из сообщения #20. Экспортировал сферу в файл формата dae. В Three.js есть загрузчик dae и есть вращение камеры зажатой левой кнопкой мышкой, перемещение правой кнопкой и приближение/отдаление с помощью колёсика мыши: https://plnkr.co/edit/CucNwHibghwihJB7?preview Загрузил одну сферу и три текстуры (со стрелков влево, вправо и красную текстуру). Из одной сферы сделал клоны с соответствующими текстурами. Можете ещё сделать клонов и расставить сферы, где захотите.
Миниатюры
3D анимация кристаллической решетки  
Вложения
Тип файла: zip atom-rotation-threejs.zip (70.0 Кб, 2 просмотров)
0
7974 / 2924 / 489
Регистрация: 05.10.2013
Сообщений: 7,833
Записей в блоге: 209
11.09.2024, 22:00
Если вы зарегистрируетесь на https://plnkr.co/ (можно сделать вход через GitHub или Google), то можно будет сделать клон проекта выше, нажав на кнопку "Fork" в левом верхнем углу, перейдя по ссылке: https://plnkr.co/edit/CucNwHibghwihJB7, а далее вы сможете вносить изменения в проект, добавлять новые сферы по аналогии с имеющимися, сохранять проект и делиться ссылкой на исполняемое приложение в браузере. Можно даже делиться ссылкой, которая выводит на весь экран результат без кода: https://run.plnkr.co/preview/c... zx35s31rl/ - эту ссылку можно получить если нажать на кнопку в правом верхнем углу в Preview.
0
0 / 6 / 0
Регистрация: 17.06.2024
Сообщений: 82
12.09.2024, 20:02  [ТС]
Большое спасибо!
0
7974 / 2924 / 489
Регистрация: 05.10.2013
Сообщений: 7,833
Записей в блоге: 209
13.09.2024, 12:24
Вам подошёл этот вариант или всё непонятно? Пробовали в этом примере создать новые сферы и расставить их в углы куба? С какими языками программирования у вас был опыт? Нужно ли объяснить, как добавить новую сферу в пример на Three.js?

Вы задавайте вопросы, если что-то непонятно. Объясню по шагам, как добавить новую сферу. Напишите, на каком шаге у вас возникла проблема или какой шаг непонятно, как делать:
  • Перейдите по ссылке: https://plnkr.co/edit/CucNwHibghwihJB7
  • В верхнем правом углу нажмите кнопку "Sing up". Появится окно, где можно выбрать с помощью чего можно зарегистрироваться: GitHub, Google и т.д. Если у вас нет ни Google, ни GitHub, то напишите об этом. Рассмотрим другие варианты
  • Нажмите кнопку "Fork" в левом верхнем углу, чтобы сделать копию примера на своём аккаунте
  • Откройте файл "index.js" на панели слева, кликнув по нему один раз
  • Откроется код приложения.

Наверху файла вы видите переменные, которые будут хранить ссылки на сферы:
JavaScript
1
2
3
let sphereLeft;
let sphereRight;
let sphereRed;
Ниже находится функция loadAssets(), которая загружает 3D-модель сферы. В этой функции создаются три сферы. Вращение сфер происходит в функции render():

JavaScript
1
2
3
4
5
6
function render() {
    if (sphereLeft && sphereRight) {
        const delta = clock.getDelta();
        sphereLeft.rotation.z -= 3 * delta;
        sphereRight.rotation.z += 3 * delta;
    }
Здесь число 3 определяет скорость вращения сфер. Поменяйте одно из числе на более большое или меньшее и запустите приложение, чтобы увидеть результат. Перед числом 3 вы видите "-=" и "+=" - знак "+" и "-" определяют направление вращения сфер.

Рассмотрим красную сферу. Я написал комментарии:

JavaScript
1
2
3
4
5
6
7
    sphereRed = sphere.clone(); // Делаем копию сферы
    sphereRed.scale.set(0.1, 0.1, 0.1); // Задаём размер сферы по X, Y и Z. В данном случае, размер сферы 0.1
    sphereRed.position.set(0, 0, 0); // Задаём позицию сферы. Она находится в начале координат: (0, 0, 0)
    const sphereRedTexture = await textureLoader.loadAsync("./assets/red.png"); // Загружаем текстуру для красной сферы
    const sphereRedMaterial = new THREE.MeshPhongMaterial({ map: sphereRedTexture }); // Создаём материал
    sphereRed.material = sphereRedMaterial; // Применяем материал
    scene.add(sphereRed); // Добавляем сферу на сцену
Попробуйте создать свою сферу. Вам сначала нужно добавить новую переменную. Например, я добавил красную сферу под номеров 2:

JavaScript
1
2
3
4
let sphereLeft;
let sphereRight;
let sphereRed;
let sphereRed2;
Теперь я копирую код клонирования сферы и меняю "sphereRed" на "sphereRed2". Материал я могу использовать тот, который был выше создан для предыдущей красной сферы. Задаю новую позицию (0, 2, 0) для новой красной сферы:

JavaScript
1
2
3
4
5
    sphereRed2 = sphere.clone();
    sphereRed2.scale.set(0.1, 0.1, 0.1);
    sphereRed2.position.set(0, 2, 0);
    sphereRed2.material = sphereRedMaterial;
    scene.add(sphereRed2);
Запускаю приложение и вижу новую красную сферу:



Не забудьте нажать кнопку "Save" после какого-либо редактирования, чтобы сохранить результат работы. Теперь вы можете копировать ссылку и опубликовать свою работу, чтобы любой мог открыть, увидеть результат вашей работы в живую и мог сделать "Fork": https://plnkr.co/edit/CucNwHibghwihJB7 Приложение будет запускаться на любой ОС, где есть браузер с поддержкой WebGL. Создайте ещё атому и расставьте их, как на рисунки из сообщения #3 и опубликуйте ссылку на вашу работу - это будет лучшая награда мне за то, что я потратил своё время.

Миниатюры
1
0 / 6 / 0
Регистрация: 17.06.2024
Сообщений: 82
13.09.2024, 15:03  [ТС]
Большое спасибо Иван. Я видимо переоценил свои способности в программировании. То что вы предлагаете для меня сложновато. Попробую что то изобразить старым дедовским способом - Gif анимацией.
0
13.09.2024, 22:30

Не по теме:

У меня впечатление что дедушка пытается помочь внучке с заданием :) Это нормально, хочу заметить что задание хорошее, умное. Не слишком трудное, но и не лёгкое. Нулевой человек получает базовые знания 3D, без занудства, идиотских лекций и.т.п. Респект преподам

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.09.2024, 22:30
Помогаю со студенческими работами здесь

Найти постоянную кристаллической решетки золота
Узкий пучок электронов, прошедших ускоряющую разность потенциалов U = 30 кВ, падает нормально на тонкий листок золота, проходит через него...

Вычислить результирующую ДН приемо-передающей антенной решетки, состоящей из линейной передающей решетки из 8 элементов
Вычислить результирующую диаграмму направленности приемо-передающей антенной решетки, состоящей из линейной передающей решетки из восьми...

Определить число максимумов в спектре дифракционной решетки, период дифракционной решетки.
Дифракционная решетка шириной 12 мм содержит 4800 штрихов. Определить: 1) число максимумов в спектре дифракционной решетки для длины волны...

Определить индекс плоскости в кристаллической решетке
Индексы заштрихованной области

Постоянная решетки
Что нужно сделать с дифракционной решеткой чтобы, не меняя d-постоянную дифракционной решетки, увеличить число наблюдаемых порядков...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Node.js изнутри: Рантайм, архитектура и исходный код
Reangularity 29.05.2025
Node. js представляет собой среду выполнения JavaScript, построенную на движке V8 от Google Chrome. Но называть его просто "средой выполнения" - все равно что назвать швейцарский нож "штукой с. . .
Обработка Big Data на C#
stackOverflow 29.05.2025
C# традиционно оставался в тени Java, Python и Scala, когда речь заходила о работе с большими данными. Многие считали, что . NET недостаточно зрелая для таких задач. Но времена изменились. Язык C#. . .
Как генерируется мир в Minecraft
GameUnited 28.05.2025
Задумывались ли вы когда-нибудь о том, сколько песчинок на нашей планете? По приблизительным подсчетам - более 7 квинтиллионов! Это цыфра с 18 нулями. И все же, это даже не половина количества. . .
Один суперкластер Kubernetes для вообще всего
Mr. Docker 28.05.2025
Ваша компания развивается, количество сервисов множится, команды разработки разрастаются, а DevOps-инженеры начинают напоминать ту самую собаку из мема про "всё нормально, когда ничего не нормально". . . .
CAP-теорема или почему идеальной распределенной системы не существует
ArchitectMsa 28.05.2025
Вы переводите деньги со своего счета на счет друга. Казалось бы, что может быть проще? Вы открываете приложение банка, вводите сумму, жмете кнопку - и деньги мгновенно переходят с одного счета на. . .
Пишем первый чатбот на C# с нейросетью и Microsoft Bot Framework
UnmanagedCoder 28.05.2025
Microsoft Bot Framework представляет собой мощнейший инструментарий для создания разговорных интерфейсов любой сложности. Он предлагает целостную экосистему, которая включает SDK для C#, сервисы. . .
Event-Driven приложения с Apache Kafka и KafkaFlow в .NET
stackOverflow 26.05.2025
Для . NET разработчиков работа с Kafka традиционно сопряжена с определенными трудностями. Официальный клиент Confluent хорош, но часто требует написания большого количества шаблонного кода. Многие. . .
Квантовое программирование: Реализуем первый алгоритм на Q#
EggHead 26.05.2025
Квантовое программирование — одна из тех областей, которая ещё недавно казалась чем-то недоступным обычному разработчику. Многие представляют себе учёных в белых халатах, работающих с огромными. . .
Запилил скелет проекта физического симулятора.
Hrethgir 26.05.2025
Нзвание публикации "Вычислить VS запомнить — простой и экономичный пример организации обработки потока данных для физической симуляции". Пока только скелет, но всё - будет. . . .
Авто-векторизация в C с GCC 14
NullReferenced 25.05.2025
Современные процессоры давно перестали наращивать тактовую частоту как основной способ увеличения производительности. Вместо этого они обзавелись специализироваными блоками SIMD (Single Instruction,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »